无法接收发送到我自己的IP (Python UDP套接字)的数据包**修复**



所以我有一个典型的UDP服务器和客户端。服务器绑定到IP"0.0.0.0"的端口20000。据我所知,它将绑定到来自我的主机的任何IPv4地址例如,包括我的内部IP 192.168.1.2。然而,当它们被发送到localhost(127.0.0.1)时,我会收到消息,但当我的客户端发送到我自己的计算机内部IP地址时,就不会收到消息,如下面的代码所示。我的内部IP是从cmd ipconfig获得的。两个应用程序在同一台计算机上运行

服务器代码:

import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('0.0.0.0',20000))
print("listening at 0.0.0.0 at port 20000")
data,address= s.recvfrom(65535)
print "MESSAGE FROM",address,":",data
s.close()
客户机代码:

import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('127.0.0.1',50000))
s.sendto("MESSAGE1!",('192.168.1.2',20000))   
print 'message sent!'
s.close()

解决方案:我发现我不能从客户端套接字发送数据包到"外部"ip 192.168.1.2,当它绑定到本地主机ip例如127.0.0.1时。通过将客户端套接字更改为192.168.1.2,我可以将其发送到自己的外部ip 192.168.1.2

'192.168.1.2'为私有IP地址。你的客户不会看到的。你需要为IP地址付费,让它可用,正确配置路由器,正确配置防火墙。

你的代码中仍然有一个错误,即使你让它工作。

客户端没有使用bind()

bind()是服务器端函数。

你的客户端代码应该是这样的:

import socket
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.sendto("MESSAGE1!",('192.168.1.2',20000))   
print 'message sent!'
s.close()

最新更新