尝试在树莓派上托管 python 套接字服务器时出现 ConnectionRefusedError
Posted
技术标签:
【中文标题】尝试在树莓派上托管 python 套接字服务器时出现 ConnectionRefusedError【英文标题】:ConnectionRefusedError when trying to host python socket server on raspberry pi 【发布时间】:2020-06-22 20:26:01 【问题描述】:我正在尝试制作一个基本的 python 网络程序。我要做的就是在服务器和客户端之间来回发送文本字符串。我正在尝试在我的 Raspberry Pi 上托管服务器,并与 Windows 10 上的客户端连接。该程序在我的计算机上本地运行良好,但是当我尝试连接到我的服务器时,它给了我ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it.
我的服务器代码如下:
import socket # Import socket module
import netifaces as ni
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.bind((host, port))
#host_ip = ni.ifaddresses('wlan0')[ni.AF_INET][0]['addr']
host_ip = "bruh?"
print("Server started! \nHostname: " + host + " \nIP: " + host_ip + " \nPort: " + str(port))
s.listen() # Now wait for client connection.
while True:
c, addr = s.accept() # Establish connection with client.
print('Got connection from', addr)
output = "Welcome to the server!".encode()
c.send(output)
c.close()
客户端代码:
import socket
s = socket.socket()
host = 192.168.1.21
port = 12345
s.connect((host, int(port)))
noResponse = False
serverResponse = s.recv(1024).decode()
print(serverResponse)
s.close()
有人知道我的问题是什么吗?谢谢。
【问题讨论】:
【参考方案1】:您收到 ConnectionRefusedError 可能有几个原因,请尝试以下方法:
-
检查是否没有防火墙阻止您的连接。
仔细检查服务器IP,如果错误可能会出现此错误。
尝试使用 Hercules 检查连接。
另外,我将代码更改如下:
服务器:
import socket
HOST = '' # localhost
PORT = # IMPORTANT !! Do not use reserved ports
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.bind((HOST, PORT))
sock.listen()
conn, addr = sock.accept()
with conn:
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data:
break
print('Data: ',data)
conn.sendall('RT')
客户:
import socket
HOST = '' # server IP address
PORT = # server port
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.connect((HOST, PORT))
sock.sendall('Hello, I am the Client')
data = sock.recv(1024)
print('Received', data)
通过这样做,您使用的是 TCP 连接,您可以使用不同的 TCP 服务器和客户端模拟器测试您的代码。
【讨论】:
1.我可以验证没有防火墙阻止我的连接,因为我既可以从服务器 ping 到客户端,也可以从客户端到服务器。 2.服务器IP正确。 3. 我正在尝试连接到我的 LAN 网络上的服务器。如果我尝试在我的机器上本地运行服务器和客户端,我的程序可以正常工作,但当我将服务器卸载到另一台设备时就不行。你是说我不能在本地网络上将一台设备连接到另一台设备? 尝试更改代码以创建 TCP 套接字(参见示例),然后使用像 Hercules 这样的 TCP/IP 客户端服务器终端测试代码,这样做将帮助您查看问题出在哪里,并且建立连接。 @NinjaPixels以上是关于尝试在树莓派上托管 python 套接字服务器时出现 ConnectionRefusedError的主要内容,如果未能解决你的问题,请参考以下文章
发送图像时出现 Python 套接字错误。无法解码字节/意外 EOF
HTTP 错误 500.19 - 在 IIS 上托管时出现内部服务器错误 [重复]
SyntaxError:在 Heroku 上托管 Discord 机器人时出现意外的令牌 '??='