【发布时间】:2021-01-08 21:40:27
【问题描述】:
尝试使用 socket.recv 和 socket.sendto() 连接到局域网上没有 UDP 套接字的主机。
两个python版本的系统架构相同,只是python不同。
Windows 10 专业版 x64 Python 2.7 到 Python 3.8
在 python2 和 python3 版本中,正在接收的套接字是使用 socket.setblocking(0) 设置的,但由于某种原因,python3 等效项显然需要更长的时间来接收数据。就好像它仍然设置为阻塞,或者在超时之前等待响应。
如果有帮助的话,正在发送和接收的数据以大约 100 赫兹的速度流动。
s_from_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
s_from_server.setblocking(0)
设置,然后
s_from_dspace.bind((ANY_IP, RX_SERVER_PORT))
套接字已绑定。
data_server = s_from_server.recv(364)
然后通过接收到的数据完成其余代码。
这里是发送数据的例子
s_to_server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
bytes_to_server = struct.pack('H', gpsWeek)
bytes_to_server += struct.pack('dd', gpsSOW, utcTime)
s_to_server.sendto(bytes_to_server, (SERVER_UDP_IP, TX_SERVER_PORT))
我只是不确定 Python 2 和 Python 3 之间发生了什么变化导致了这种滞后。 Python2 在各个方面都感觉几乎是瞬间完成的,但 python3 代码感觉就像它挂在每个响应上一样。任何帮助表示赞赏!
【问题讨论】:
标签: python python-3.x sockets