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 发送的消息?
可能发生的两件事:
- 您没有正确传递远程 IP。确保您没有按字面意思传递
'remote_ip'
并将其替换为服务器的有效 IPv4 IP 地址字符串(IE:'192.168.0.100'
)。 (仅供参考,在服务器上您可以只放置 '0.0.0.0'
来监听所有 IP 地址)
- 您仍然可以将客户端绑定到本地地址 (127.0.0.1),但将目标设置为有效的外部地址 (192.168.0.100)。删除客户端中的
socket.bind
行代码来测试这个,你不应该需要它。
如果这些都不起作用,则在客户端和目标服务器上添加 ping
命令 运行 的结果。
我本地电脑上的 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 发送的消息?
可能发生的两件事:
- 您没有正确传递远程 IP。确保您没有按字面意思传递
'remote_ip'
并将其替换为服务器的有效 IPv4 IP 地址字符串(IE:'192.168.0.100'
)。 (仅供参考,在服务器上您可以只放置'0.0.0.0'
来监听所有 IP 地址) - 您仍然可以将客户端绑定到本地地址 (127.0.0.1),但将目标设置为有效的外部地址 (192.168.0.100)。删除客户端中的
socket.bind
行代码来测试这个,你不应该需要它。
如果这些都不起作用,则在客户端和目标服务器上添加 ping
命令 运行 的结果。