5

我正在尝试通过网络连接到我的树莓派。我正在运行 python 作为 raspi 上的服务器。这是我从网上下载的简单服务器代码:

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)

抛出错误:"No connection could be made because the target machine actively refused it"

注意: -raspi 作为客户端到 raspi 作为服务器工作正常。-我做了一些研究,似乎最常见的原因是防火墙或路由器坏了。--我不认为它是路由器,因为我可以对其他计算机进行粗暴的操作。——我使用的是 Raspbian “wheezy” Debian 发行版,我不认为它带有防火墙。

任何帮助,将不胜感激。谢谢!

4

1 回答 1

4

我认为问题在于您正在使用socket.gethostname()它将返回主机名而不是IP。很可能这意味着您的套接字将绑定到该主机名而不是 IP,这意味着 python 只会监听到hostname可能是的连接:raspberrypi

很可能您的机器不知道该主机名,因此您想改用它:

socket.gethostbyname(socket.gethostname())

它还在文档中说

要记住的是主机名和 IP 不是一回事。但是,您可以将主机名绑定到 /etc/hosts 文件中的 IP,如下所示:

192.168.1.247 raspberrypi

于 2013-01-06T12:23:55.933 回答