【问题标题】:Why don't I receive any UDP data?为什么我收不到任何 UDP 数据?
【发布时间】:2015-09-29 09:01:39
【问题描述】:

我有一个简单的 Python 脚本,它试图在我的机器上侦听任何发送到有线以太网适配器(设置为 10.10.5.51 的静态 IP)的 UDP 数据:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.bind(('10.10.5.51', 72))
while True:
    print(s.recvfrom(65535))

我可以从 wireshark 看到我的机器正在那个端口上接收数据,那么为什么 Python 脚本没有报告任何内容?

Edit1 - 测试本地地址

我尝试绑定到“127.0.0.1”并使用以下发件人/收件人发送到相同的地址,它可以正常工作...

发件人:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
source_port = 73
dest_port = 72
address = '127.0.0.1'
s.bind((address, source_port))
print("Sending from port: %d"%source_port)
while True:
    print(s.sendto(bytes('Testing..','UTF-8'), (address, dest_port)))

接收者:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
port = 72
s.bind(('127.0.0.1', port))
print("Listening on port: %d"%port)
while True:
    print(s.recvfrom(65535))

如果我将地址更改为我的以太网卡 (10.10.5.51) 的地址,那么我什么也看不到(wireshark 甚至没有显示任何流量)。

Edit2 - 更高的源端口

如果我将源端口连接到非特权端口(例如 11000),我现在可以看到我的 Python 发送方正在产生的流量...

发件人:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
source_port = 11000
dest_port = 72
address = '10.10.20.51'
s.bind((address, source_port))
print("Bound to address: "+address)
print("Sending from port %d to port %d"%(source_port,dest_port))
while True:
    s.sendto(bytes('Testing..','UTF-8'), (address, dest_port))

接收者:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
port = 72
address = '10.10.20.51'
s.bind((address, port))
print("Listening on %s:%d"%(address,port))
while True:
    print(s.recvfrom(65535))

...但我仍然没有看到wireshark 报告的流量。我的 Python 接收器是否可能以某种方式绑定到错误的适配器或类似的东西?

【问题讨论】:

  • 我没有看到问题,但将 s.bind(('10.10.5.51', 72)) 更改为 s.bind(('0.0.0.0', 72)) 以确保
  • 使用 '0.0.0.0' 不起作用。
  • 您是否以特权用户身份运行代码?普通用户通常无法打开72等低端口号。
  • 他没有提到任何错误,而且他使用的是windows 7,所以使用低端口不会有任何问题。
  • 是否有防火墙阻止了您的应用程序?

标签: python windows-7 udp


【解决方案1】:

我不确定你是尝试使用本地主机地址“127.0.0.1”还是“0.0.0.0”

【讨论】:

  • 这两种方法都试过了。
猜你喜欢
  • 1970-01-01
  • 2013-12-14
  • 2022-01-04
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多