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

3
我将尝试在我的树莓派(运行Raspbian)和MacBook Pro(运行Mavericks)之间建立Python套接字连接。
这两个设备都连接到我公寓的同一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 上没有出现错误。

我的问题如下:

  1. 127.0.0.1 是 "host" 的正确输入吗? (请注意,我也尝试过 "localhost")
  2. 对于客户端和服务器端代码,"host" 的输入必须相同吗?
  3. RPi 和 Macbook 都必须连接到同一个 WiFi 网络吗?
  4. 是否需要在 RPi 或我的 Macbook 上进行任何设置才能使其正常工作(请注意,我的 RPi 是全新的 B 型,并且在此之前我没有做过任何其他设置)?
  5. 您知道为什么我会收到此错误消息以及如何解决它吗?

非常感谢您的帮助!!


我会尝试将主机值设置为0.0.0.0。让我知道发生了什么。此外,在Mac上运行的代码相当长,或者您没有关闭字符串? - Antonio Ragagnin
2个回答

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。

树莓派和Macbook是否都必须连接到同一个WiFi网络?
是和不是。它可以在同一个WiFi网络上工作,但是如果它们直接连接或通过IP路由器连接,它们也可以在两个不同的WiFi网络上工作。但是,大多数情况下,它们通过NAT(网络地址翻译器)连接到互联网,那么它将无法工作。

是否需要在树莓派或Macbook上进行任何设置才能使其正常工作?(请注意,我的树莓派是新的B型,并且我之前没有为其设置任何内容)
我对树莓派不太了解,但它看起来像标准TCP套接字,应该可以直接使用。

您知道为什么会出现此错误以及如何修复它吗?
如我一开始所说:您试图在错误的端口上连接到树莓派(127.0.0.1)。


0
你已经在端口7777上创建了一个监听器,然后你连接到了4446!!!
只需在同一端口上进行连接即可=)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接