OSError: [Errno 22] Invalid argument for udp connection

OSError: [Errno 22] Invalid argument for udp connection

我本地电脑上的 udp 服务器和客户端。

cat server.py
import socket
MAX_BYTES =65535

def server():
    sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    sock.bind(('127.0.0.1',10000))
    print('Listening at {}'.format(sock.getsockname()))
    while True:
        data,address = sock.recvfrom(MAX_BYTES)
        text = data.decode('ascii')
        print('The client at {} says {!r} '.format(address,text))

if __name__ == "__main__":
    server()

绑定端口10000到localhost-127.0.0.1,监听客户端发送的消息

cat client.py
import socket
import time
from datetime import datetime
MAX_BYTES =65535

def client():
    sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    sock.bind(('127.0.0.1',10001))
    text = 'The time is {}'.format(datetime.now())
    data = text.encode('ascii')
    while True:
        time.sleep(10)
        sock.sendto(data,('127.0.0.1',10000))
        print('The OS assinged me the address {}'.format(sock.getsockname()))

if __name__ == "__main__":
    client()

运行 server.py 和 client.py 在我的本地电脑上,服务器可以接收来自客户端的消息。

现在我用遥控器 vps_ip 更改了 client.py 行中的 127.0.0.1

sock.sendto(data,('127.0.0.1',10000))

进入

sock.sendto(data,('remote_ip',10000))

在本地电脑上将 server.py 推送到我的 vps.Start client.py,在远程 vps 上推送 server.py,启动它们。 在我的客户端中,出现错误信息:

  File "client.py", line 13, in client
    sock.sendto(data,('remote_ip',10000))
OSError: [Errno 22] Invalid argument

如何使远程 ip 接收从我的本地客户端 pc 发送的消息?

可能发生的两件事:

  1. 您没有正确传递远程 IP。确保您没有按字面意思传递 'remote_ip' 并将其替换为服务器的有效 IPv4 IP 地址字符串(IE:'192.168.0.100')。 (仅供参考,在服务器上您可以只放置 '0.0.0.0' 来监听所有 IP 地址)
  2. 您仍然可以将客户端绑定到本地地址 (127.0.0.1),但将目标设置为有效的外部地址 (192.168.0.100)。删除客户端中的 socket.bind 行代码来测试这个,你不应该需要它。

如果这些都不起作用,则在客户端和目标服务器上添加 ping 命令 运行 的结果。