我正在尝试在我的Raspberry Pi(运行Raspbian)和Macbook Pro(运行Mavericks)之间设置一个Python套接字。
两个设备都连接到我的appt中的同一个WiFi网络。我在RPi上运行服务器代码,然后在Macbook上运行客户端代码(我也尝试过相反的方法)。我认为我遗漏了一个设置步骤,因为我正在使用的代码是在多个站点上找到的,所以我认为它是有效的。我还检查了我的Macbook是否关闭了防火墙。
服务器代码:
from socket import *
host = "127.0.0.1"
print host
port = 7777
s = socket(AF_INET, SOCK_STREAM)
print "Socket Made"
s.bind((host,port))
print "Socket Bound"
s.listen(5)
print "Listening for connections..."
q,addr = s.accept()
data = raw_input("Enter data to be sent: ")
q.send(data)
客户代码:
from socket import *
host = "127.0.0.1"
print host
port=4446
s=socket(AF_INET, SOCK_STREAM)
print "socket made"
s.connect((host,port))
print "socket connected!!!"
msg=s.recv(1024)
print "Message from server : " + msg
我得到错误:
Traceback (most recent call last): File "TCPclient.py", line 9, in <module> s.connect((host,port)) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py",
line 224, in meth return getattr(self._sock,name)(*args) socket.error: [Errno 61] Connection refused
我执行代码的过程是:
在RPi终端中键入“python TCPserver.py”
在Macbook终端中键入“python TCPclient.py”
然后我在我的Macbook上收到错误消息,RPi上没有错误
我的问题是:
非常感谢您的帮助!!
127.0.0.1是本地计算机的特殊IP地址。
必须在客户端代码中设置mac的真实IP地址(在LAN上)。
您还应该在服务器上绑定此IP,或者在0.0.0.0上绑定所有可用的IP地址。
您还必须在客户端和服务器上使用相同的端口号。
并回答您的问题:
127.0.0.1是“主机”的正确输入吗?(请注意,我也尝试过“localhost”)
127.0.0.1与localhost相同,表示本地计算机。如果在同一台机器上运行客户机和服务器,这将起作用,否则您需要mac的真实IP地址。在控制台中尝试ifconfig。
对于客户机和服务器代码,主机的输入必须相同吗?
是和否。在服务器上,您将绑定到端口和地址,因此您将等待此端口和地址上的连接。您可以使用IP地址,或0.0.0.0。
RPi和Macbook是否应该连接到同一个WiFi网络?
是和否。它将与同一个WiFi网络一起工作,但如果两个不同的WiFi网络直接连接在一起或与IP路由器连接,它也将与它们一起工作。大多数情况下,虽然它们是通过NAT(网络地址转换器)连接到internet的,但这样就不起作用了。
是否需要在RPi或我的Macbook上进行任何设置才能正常工作(请注意,我的RPi是B型的,是新的,在此之前我没有在它上设置任何其他设置)
我不太了解RPi,但它看起来像是标准的TCP套接字,应该可以开箱即用。
你知道我为什么会收到这个错误以及如何修复它吗?
正如我在开头所说:您试图连接到错误端口上的RPi(127.0.0.1)。
相关问题 更多 >
编程相关推荐