python socket 沾包求助

1:公司要通过socket的方式请求服务器拿数据,recv返回回来后要判断数据是否完整,是否在完成一条后还有下一条数据,从没有写过沾包,想求助具体写法,返回数据的形式是 长度 code 内容。这个接收的方法单独起一个现成while 循环来跑 不停地跑

数据有自己定义的协议吗

自行参考下socket 的编写吧;

提供一下思路:

buffer = while 1: data = recv # 注意处理各种异常,recv有可能返回非str if not data: continue buffer += data while buffer: pack_len = ... # 取长度 (长度值必然是占固定的位数) if lenbuffer < pack_len: break pack = buffer[:pack_len] # 取包 handlepack # 处理一个包 buffer = buffer[pack_len:] # 从缓存中删除包

TCP粘包的必然是同一个对端peer, 这里不对peer做处理,自己要对每个peer多同样的处理
别把不同peer的数据加到一起去了哦~

使用自定义协议的话,在报文里面增加一个长度字段,根据这个长度判断就能知道本次报文的长度,以及是否有下一条数据。

可以参考Twisted的
Int32StringReceiver

发表评论

电子邮件地址不会被公开。 必填项已用*标注