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

问题描述 投票:0回答:2

所以我有一个典型的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()

解决方案:我发现当它绑定到localhost ip例如127.0.0.1时,我无法从客户端套接字向“外部”IP 192.168.1.2发送数据包。通过将客户端套接字更改为192.168.1.2,我可以将其发送到自己的外部IP 192.168.1.2

python python-2.7 sockets networking
2个回答
0
投票

'192.168.1.2'是私有IP地址。您的客户将无法看到。您需要支付IP地址,使其可用,正确配置路由器以及正确配置防火墙。


0
投票

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

客户端不使用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()
© www.soinside.com 2019 - 2024. All rights reserved.