【问题标题】:Cant recieve packets sent to my own IP (Python UDP sockets) **FIXED**无法接收发送到我自己 IP 的数据包(Python UDP 套接字)**已修复**
【发布时间】:2015-08-22 16:45:54
【问题描述】:

所以我有一个典型的 UDP 服务器和客户端。 服务器绑定到 IP '0.0.0.0' 端口 20000。 据我所知,它将绑定到来自我的主机的任何 IPv4 地址 例如,包括我的内部 IP 192.168.1.2。但是,当它们发送到本地主机(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

【问题讨论】:

  • 尝试(暂时)禁用计算机上的防火墙以查看您的连接是否被阻止可能会有所帮助
  • 我在同一台机器上发送 2 个数据包

标签: python python-2.7 sockets networking


【解决方案1】:

“192.168.1.2”是私有 IP 地址。您的客户将无法看到这一点。您需要为 IP 地址付费,使其可用,正确配置您的路由器,并正确配置您的防火墙。

【讨论】:

  • 我在同一台机器上运行代码。无论如何,我已经解决了我自己的问题,非常感谢您抽出宝贵时间回复。祝你有美好的一天
【解决方案2】:

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

客户端不使用 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()

【讨论】:

    猜你喜欢
    • 2015-11-26
    • 1970-01-01
    • 2010-11-13
    • 2013-11-19
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    相关资源
    最近更新 更多