【问题标题】:ConnectionRefusedError when trying to host python socket server on raspberry pi尝试在树莓派上托管 python 套接字服务器时出现 ConnectionRefusedError
【发布时间】: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()

有人知道我的问题是什么吗?谢谢。

【问题讨论】:

    标签: python sockets raspberry-pi


    【解决方案1】:

    您收到 ConnectionRefusedError 可能有几个原因,请尝试以下方法:

    1. 检查是否没有防火墙阻止您的连接。
    2. 仔细检查服务器IP,如果错误可能会出现此错误。
    3. 尝试使用 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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    相关资源
    最近更新 更多