繁体   English   中英

使用python套接字连接到raspberrypi时出错

[英]Error connecting to raspberrypi using python socket

我试图通过网络连接到我的覆盆子pi。 我正在运行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是CLIENT而另一台计算机是服务器时它工作正常。 但是,当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发行版,我不认为它带有防火墙。

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

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

很可能你的机器不知道那个主机名,所以你想要使用它:

socket.gethostbyname(socket.gethostname())

它也在文档中

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

192.168.1.247 raspberrypi

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM