如何解决Python-套接字一次只获取一条消息
我正在连接服务器并发送消息。下面是简化的代码。服务器将首先以特定的确认消息响应,然后是实际响应
self._sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self._sock.setsockopt(socket.IPPROTO_TCP,socket.TCP_NODELAY,1)
self._sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
self._sock.settimeout(0.1)
def ReqResp(self,msg,Addr=None):
self._UDSSend(msg,targetAddr = Addr)
return self._UDSRecv()
def _UDSRecv()
resp = self._sock.recv(1024)
# Extract payload from resp and check if it is an ACK (some parts excluded for brevity)
if payload == 'ACK':
resp = self._UDSRecv() # Got the ACK,now call again to get next response
我发现有时服务器响应速度如此之快,以至于ACK消息和实际的命令响应消息都被第一个recv()
收集。但是,我想一次抓住它们-有办法吗?我需要以其他方式配置我的套接字吗?
我知道我可以减小recv()
缓冲区的大小,但不能保证服务器将发送的内容(它可能会以ACK响应,也可能会发送我需要以其他方式处理的其他内容)。
Wireshark将ACK消息和命令响应视为单独的帧,因此我假设这是可能的,但不确定如何实现。
解决方法
不,这不可能。
TCP发送字节流。它不会将字节分成消息。它只发送字节,recv
得到一些正在等待的字节。如果您希望能够将字节分成消息,那就是您的工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。