[英]Python2 -> Python3 Socket is non-blocking in python2, but blocks longer in python3
尝试使用 socket.recv 和 socket.sendto() 连接到具有 UDP 套接字的局域网上不可用的主机。
两个 python 版本的系统架构相同,只是 python 不同。
Windows 10 Pro 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)
然后通过接收到的数据完成代码的 Rest。
这是发送数据的示例
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 代码感觉就像它挂在每个响应上一样。 任何帮助表示赞赏! <3
使用 UDP 我认为您应该使用socket.recvfrom
并指定您希望接收的字节数,例如socket.recvfrom(4096)
。 4096这里是一个任意的数字,你应该根据服务器协议添加你自己的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.