python套接字:确保在关闭连接之前发送TCP数据包

我正在使用通过TCP控制的中继.据我所知,以下代码应该起作用:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.0.200', 17494))
s.send(chr(101))
s.close()

但是,我注意到在实际发送包之前套接字已关闭,并且中继没有做任何事情.作为肮脏的解决方案,我现在在关闭连接之前放置一个sleep语句并且它正常工作.

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.0.200', 17494))
s.send(chr(101))
time.sleep(0.01)
s.close()

在关闭连接之前,是否有更聪明的方法可以确保包实际发送?

解决方法:

您可以使用s.setsockopt设置SO_LINGER选项. linger选项使套接字等待(内部)并仅在将所有挂起数据发送到指定的超时值后才关闭.就像是:

linger_enabled = 1
linger_time = 10 #This is in seconds.
linger_struct = struct.pack('ii', linger_enabled, linger_time)
s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, linger_struct)
上一篇:蛇臂机器人动作逼真功能强大!


下一篇:模型权重的保存与加载 回调函数的使用