我正在尝试通过网络连接到我的树莓派。 我在 raspi 上运行 python 作为服务器。 这是我从网上获得的简单服务器代码:
import socket
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 80
print (host)
print (port)
serversocket.bind((host, port))
serversocket.listen(5)
print ('server started and listening')
while 1:
(clientsocket, address) = serversocket.accept()
print ("connection found!")
data = clientsocket.recv(1024).decode()
print (data)
clientsocket.send("data is sent".encode())
测试客户端代码:
import socket
s = socket.socket()
host = "192.168.1.247"
port = 80
s.connect((host,port))
s.send('randomData'.encode())
data = ''
data = s.recv(1024).decode()
print (data)
s.close
我已经在其他电脑上测试过了,这些都工作正常。 当 raspi 是客户端而另一台计算机是服务器时,它工作正常。但, 当 raspi 是 SERVER 而另一台计算机是客户端时,我总是得到同样的错误: “无法建立连接,因为目标机器主动拒绝”
尝试使用 C# 连接:
TcpClient client = new TcpClient("192.168.1.247", 80)
抛出错误:“无法建立连接,因为目标机器主动拒绝”
注意: -raspi 作为客户端到 raspi 作为服务器工作正常。 -我做了一些研究,似乎最常见的原因是防火墙或坏路由器。 --我不认为它是路由器,因为我可以很好地对其他计算机进行 raspy。 --我正在使用 Raspbian“wheezy”Debian 发行版,我认为它没有防火墙。
如有任何帮助,我们将不胜感激。 谢谢!
最佳答案
我认为问题在于您正在使用 socket.gethostname()
,它将返回主机名而不是 ip。这很可能意味着您的套接字将绑定(bind)到该主机名而不是 IP,这意味着 python 将只监听到 hostname
的连接,这可能是:raspberrypi
很可能你的机器不知道那个主机名,所以你想用这个代替:
socket.gethostbyname(socket.gethostname())
documentation 中也有说明
要记住的是主机名和 IP 不是一回事。 但是,您可以像这样将主机名绑定(bind)到/etc/hosts 文件中的 IP:
192.168.1.247 树莓派
关于python - 使用 python 套接字连接到 raspberrypi 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14178553/