【发布时间】:2014-05-08 01:02:59
【问题描述】:
我正在编写一个程序来使用 IPv6 UDP 端口向设备发送/接收数据。我的 python 代码在 Win7 平台上运行,该设备是一块定制硬件。 PC 和设备直接连接,不通过 LAN 路由。
程序工作......有点。当我最初尝试向设备发送消息时,发送失败。更具体地说,正如wireshark所看到的,我从来没有看到消息被发送到设备。当我在命令行上使用ping <ipv6_addr> -t ping 设备时,前 1 或 2 次尝试失败,之后开始接收 ping。我像以前一样终止 ping 并尝试发送消息,但现在它成功了。 Wireshark 现在显示所有消息。如果我在相对较短的时间内(在 10 秒到 2 分钟之间)继续发送消息,则程序按预期工作。如果我再等一会儿,我的消息将再次发送不出去。如果我让 ping 程序持续 ping,那么无论消息发送活动之间的时间如何,我的消息也会被发送。这是我的代码:
import socket
def connect(port):
if socket.has_ipv6:
client = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
client.bind(('', port))
client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
client.settimeout(0.25)
def send_data(addr, port, data):
client.sendto(data, (addr, port))
def main_app():
connect(10000)
bin_data = binascii.a2b_hex('deadbeef')
# Do some processing
send_data(<ipv6_address>, 10000, bin_data)
一些谷歌搜索并没有很好地确定问题是 Python 还是其他问题,所以我想我会从 Python 开始,看看它会把我带到哪里。
任何帮助将不胜感激!
【问题讨论】:
-
对我来说听起来像是某种节电问题...您的设备可能正在进入节电模式(可能只有网卡),直到它接收到一些流量。这是否也只发生在 IPv6 或 IPv4 上?
标签: python sockets udp ping ipv6