python socket 沾包求助

发布于 2022-09-02 23:38:29 字数 132 浏览 18 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

紫竹語嫣☆ 2022-09-09 23:38:29

数据有自己定义的协议吗

爱情眠于流年 2022-09-09 23:38:29

自行参考下socket 的编写吧;

乜一 2022-09-09 23:38:29

提供一下思路:

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

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

独享拥抱 2022-09-09 23:38:29

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

丢了幸福的猪 2022-09-09 23:38:29

可以参考Twisted的
Int32StringReceiver

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文