cof*_*tor 5 python udp sendto python-3.x
我有2个UDP响应到目标IP,一个接一个:
sendsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sendsock.bind(('%s' % ip_adr, 1036))
#send first packet
ok_response = "Reception Success, more to come"
str2bytes = bytes(ok_response,'utf-8')
sendsock.sendto(str2bytes, ("%s" % phone.ip_addr, int(phone.sip_port)))
#send second packet
ok_response = "Fun data here"
str2bytes = bytes(ok_response,'utf-8')
sendsock.sendto(str2bytes, ("%s" % phone.ip_addr, int(phone.sip_port)))
Run Code Online (Sandbox Code Playgroud)
我可以看到Wireshark第二个数据包被发送.但第一个似乎被忽略了.
除非有人能在我的代码中看到打嗝,是否有办法在每个sendsock.sendto()实例上执行if语句,以确保代码在被确认为已发送之前不会继续?
另外,我应该关闭sentock吗?
UDP 不能保证消息会同步到达,或者根本不会到达,因此,除非您从接收程序发回确认响应,否则它永远不会真正被确认为已发送。这是提高 UDP 与 TCP 速度的权衡。
但是,您可以sendto在 while 循环中检查(发送的字节数)的返回值,并且在发送的字节与原始消息的字节匹配或达到超时值之前不退出 while 循环。
此外,使用套接字服务器模块来简化处理套接字的过程可能会更容易。
| 归档时间: |
|
| 查看次数: |
1860 次 |
| 最近记录: |