UDP套接字sendto()函数



我得到一个错误,如果我想写我的udp套接字像这样。根据文件,应该不会有问题。我不明白为什么bind()以同样的方式工作得很好,但sendto()失败了。

udp_port = 14550
udp_server  = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_server.bind(('127.0.0.1', udp_port))
udp_clients = {}
错误:

udp_server.sendto('', ('192.0.0.1', 14550) )
socket.error: [Errno 22] Invalid argument

错误提示您有一个无效参数。在阅读您的代码时,我可以说,错误的参数是IP地址:

  • 将套接字绑定到127.0.0.1
  • 您尝试将数据发送到另一个网络上的 192.0.0.1

如果要向IP地址为192.0.0.1的主机发送数据,请将套接字绑定到同一网络中的本地网络接口,或者在可以找到到192.0.0.1路由的网络中

我在192.168.56.*有一个(私有)本地网络,如果我将套接字绑定到192.168.56.x (x是本地地址),我可以将数据发送到192.168.56.y (y是服务器地址);但如果我绑定到127.0.0.1,我得到IllegalArgumentException

您的bind调用不应该绑定到环回地址。试试这样做:

udp_server.bind(('0.0.0.0', udp_port))

Client:

sock_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock_client.sendto("message", ("127.0.0.1", 4444))
服务器:

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("127.0.0.1", 4444))
while(1):
    data, addr = sock.recvfrom(1024)
    print "received:", data

这段代码可以工作。python - 2.7 .

似乎你混合了客户端和服务器套接字,地址或子网。

最新更新