Python中的树莓派服务器/客户端套接字

3 投票
2 回答
26457 浏览
提问于 2025-04-18 00:29

我正在尝试在我的树莓派(运行Raspbian)和我的Macbook Pro(运行Mavericks)之间建立一个Python套接字连接。

这两个设备都连接在我公寓的同一个WiFi网络上。我在树莓派上运行服务器代码,然后在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

我执行代码的步骤是:

  • 在树莓派终端输入“python TCPserver.py”

  • 在Macbook终端输入“python TCPclient.py”

然后我在Macbook上收到错误信息,而树莓派上没有错误。

我的问题是:

  1. 127.0.0.1是“主机”的正确输入吗?(请注意我也试过“localhost”)
  2. 客户端和服务器代码中的主机输入必须相同吗?
  3. 树莓派和Macbook都需要连接到同一个WiFi网络吗?
  4. 为了让这个工作,树莓派或我的Macbook上需要做任何设置吗?(请注意我的树莓派是B型号,新的,在此之前我没有做过其他设置)
  5. 你知道我为什么会收到这个错误以及如何修复它吗?

非常感谢你的帮助!!

2 个回答

0

你在7777端口上创建了一个监听器,但你却在4446端口上连接了!!!!

只需要在你监听的同一个端口上连接就可以了 =)

3

127.0.0.1 是一个特别的IP地址,代表本地计算机。
你需要在客户端代码中设置你Mac的真实IP地址(在你的局域网内)。
同时,你也应该在服务器上绑定这个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网络下会工作,但如果它们通过直接连接或IP路由器连接在一起,即使在不同的WiFi网络下也可以工作。不过大多数情况下,它们是通过NAT(网络地址转换器)连接到互联网的,这样就不行了。

为了让这个工作,我的RPi或Macbook上需要做什么设置吗?(请注意我的RPi是B型号的新设备,我在此之前没有做过其他设置)
我对RPi了解不多,但看起来它像是标准的TCP套接字,应该是开箱即用的。

你知道我为什么会收到这个错误以及如何修复它吗?
正如我一开始所说的:你试图在错误的端口上连接到RPi(127.0.0.1)。

撰写回答