问题出现在树莓派(客户端)和主机之间的套接字连接上。

huangapple go评论59阅读模式
英文:

Problem with socket connect between raspberry (client) and host

问题

I've a Raspberry Pi 3 Model B. I would like to send data from raspberry to host. I use python program with socket package.

I've problem when my raspberry is client and my laptop is server.
I got next error:

OSError: [Errno 113] No route to host 

Code 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)

ifconfig on server:

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

When I swap them i.e. raspberry becomes a server then all messages are send

raspberry: 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)  

raspberry: 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                 :::*                         

I think my problem is that port 5353 is not open on tcp. But the command

sudo ufw allow 5353/tcp 

does not help.

Also, I reset my ufw's rules:

sudo ufw reset 

added new rules like

sudo ufw allow SSH
sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 5353/tcp 

and I disabled and enabled ufw.
It's not worked.

英文:

I've a Raspberry Pi 3 Model B. I would like to send data from raspberry to host. I use python program with socket package.

I've problem when my raspberry is client and my laptop is server.
I got next error:

OSError: [Errno 113] No route to host 

Code client.py:

import socket

HOST = &#39;192.168.0.107&#39;    
PORT = 5353

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    
        
    s.send(b&#39;Hello, world&#39;)
    data = s.recv(1024)
    print(&#39;Received&#39;, 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((&#39;&#39;, PORT))
    s.listen(1)
    conn, addr = s.accept()
    with conn:
        print(&#39;Connected by&#39;, addr)
        print(conn)
        while True:
            data = conn.recv(1024)
            print(data)
            if not data: break
            conn.sendall(data)

ifconfig on server:

enp4s0: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt;  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&lt;link&gt;
        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&lt;UP,LOOPBACK,RUNNING&gt;  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10&lt;host&gt;
        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

When I swap them i.e. raspberry becomes a server then all messages are send

raspberry: 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)  

raspberry: 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                 :::*                            


I think my problem is that port 5353 is not open on tcp. But the command

sudo ufw allow 5353/tcp 

does not help.

Also, I reset my ufw's rules:

sudo ufw reset 

added new rules like

sudo ufw allow SSH
sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 5353/tcp 

and I disabled and enabled ufw.
It's not worked.

答案1

得分: 0

已解决:

我的主机是 Fedora。Fedora 有自己的防火墙:链接

我在主机上的操作:

sudo firewall-cmd --state
>> 运行中
firewall-cmd --list-ports
>>   [空]
sudo firewall-cmd --add-port=5353/tcp  --timeout 15m
>> 成功
firewall-cmd --list-ports
>> 5353/tcp

然后我在树莓派上启动了客户端并获取了数据。耶!

英文:

SOLVED:

My host machine is Fedora. Fedora has its own firewall: link

My action in host:

sudo firewall-cmd --state
&gt;&gt; running
firewall-cmd --list-ports
&gt;&gt;   [empty]
sudo firewall-cmd --add-port=5353/tcp  --timeout 15m
&gt;&gt; success
firewall-cmd --list-ports
&gt;&gt; 5353/tcp

Then I launched the client on raspberry and got the data. Yippee!

huangapple
  • 本文由 发表于 2023年2月8日 19:41:26
  • 转载请务必保留本文链接:https://go.coder-hub.com/75385291.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定