You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派作为Socket客户端连接笔记本服务器时出现路由不可达错误求助

树莓派Socket客户端连接笔记本服务器报错:No route to host

错误信息

OSError: [Errno 113] No route to host

客户端代码(树莓派端 client.py)

import socket

HOST = '192.168.0.107'    
PORT = 5353

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    
        
    s.send(b'Hello, world')
    data = s.recv(1024)
    print('Received', repr(data))

服务器代码(笔记本端 server.py)

hostname  = socket.gethostname()
HOST = socket.gethostbyname(hostname)
print(HOST)            
PORT = 5353

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind(('', PORT))
    s.listen(1)
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        print(conn)
        while True:
            data = conn.recv(1024)
            print(data)
            if not data: break
            conn.sendall(data)

服务器端(笔记本)网络信息

enp4s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.107  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::ab65:70bf:9921:1d4b  prefixlen 64  scopeid 0x20<link>
        ether 18:31:bf:51:9d:9c  txqueuelen 1000  (Ethernet)
        RX packets 213759  bytes 177479962 (169.2 MiB)
        RX errors 0  dropped 27  overruns 0  frame 0
        TX packets 144335  bytes 25485658 (24.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 43423  bytes 3729254 (3.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 43423  bytes 3729254 (3.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

反向连接正常

树莓派作为服务器、笔记本作为客户端时,消息可正常发送。

树莓派端防火墙状态(sudo ufw status)

Status: active

To                         Action      From
--                         ------      ----
SSH                        ALLOW       Anywhere                  
OpenSSH                    ALLOW       Anywhere                  
80                         ALLOW       Anywhere                  
443                        ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
5353                       ALLOW       Anywhere                  
5353/tcp                   ALLOW       Anywhere                  
SSH (v6)                   ALLOW       Anywhere (v6)             
OpenSSH (v6)               ALLOW       Anywhere (v6)             
80 (v6)                    ALLOW       Anywhere (v6)             
443 (v6)                   ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             
5353 (v6)                  ALLOW       Anywhere (v6)             
5353/tcp (v6)              ALLOW       Anywhere (v6)  

树莓派端监听端口(netstat -lntu)

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:53              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 :::53                   :::*                    LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN     
udp        0      0 0.0.0.0:33841           0.0.0.0:*                          
udp        0      0 0.0.0.0:53              0.0.0.0:*                          
udp        0      0 0.0.0.0:68              0.0.0.0:*                          
udp        0      0 0.0.0.0:631             0.0.0.0:*                          
udp        0      0 0.0.0.0:5353            0.0.0.0:*                          
udp6       0      0 :::48624                :::*                               
udp6       0      0 :::53                   :::*                               
udp6       0      0 :::5353                 :::*                           

已尝试操作

  • 执行sudo ufw allow 5353/tcp开放端口,无效
  • 重置UFW规则,重新添加规则后禁用再启用UFW,问题仍存在:
    sudo ufw allow SSH
    sudo ufw allow OpenSSH
    sudo ufw allow 80
    sudo ufw allow 443
    sudo ufw allow 5353/tcp 
    

解决方法
  1. 检查并配置笔记本服务器的防火墙
    树莓派作为客户端连接笔记本,需要笔记本的防火墙允许5353端口的TCP入站连接:

    • Linux笔记本:执行sudo ufw allow 5353/tcp,再运行sudo ufw reload生效
    • Windows笔记本:打开「Windows Defender防火墙」→「高级设置」→添加入站规则,允许TCP端口5353的连接
  2. 验证网络连通性
    在树莓派终端执行ping 192.168.0.107,如果丢包说明两者不在同一局域网或IP有误,检查WiFi连接、路由器设置。

  3. 修正服务器绑定配置
    服务器代码中s.bind(('', PORT))虽能绑定所有网卡,但可手动指定绑定笔记本的局域网IP(192.168.0.107),避免hostname解析异常:

    HOST = '192.168.0.107'
    PORT = 5353
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind((HOST, PORT))
        s.listen(1)
        # 后续代码不变
    
  4. 检查端口占用情况
    在笔记本执行netstat -tulpn | grep 5353,确认5353端口是否被其他程序占用,若占用则更换端口(如5354)测试。

  5. 临时关闭防火墙排查
    临时关闭笔记本的防火墙,再运行服务器和客户端代码,若能连接成功,说明是防火墙规则配置问题,重新调整入站规则即可。


内容的提问来源于stack exchange,提问作者Kate Mosolova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:21:06