recherche

Maison  >  Questions et réponses  >  le corps du texte

粘包 - python socket 沾包求助

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

大家讲道理大家讲道理2893 Il y a quelques jours511

répondre à tous(5)je répondrai

  • ringa_lee

    ringa_lee2017-04-17 17:57:50

    Les données ont-elles leur propre protocole défini ?

    répondre
    0
  • 阿神

    阿神2017-04-17 17:57:50

    Veuillez vous référer vous-même à l'écriture de socket

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:57:50

    Fournissez quelques idées :

    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:] # 从缓存中删除包

    Les paquets TCP doivent être collés au même homologue. Le homologue n'est pas traité ici. Vous devez effectuer le même traitement pour chaque homologue
    N'ajoutez pas les données des différents homologues ~

    .

    répondre
    0
  • 迷茫

    迷茫2017-04-17 17:57:50

    Si vous utilisez un protocole personnalisé, ajoutez un champ de longueur au message. En fonction de cette longueur, vous pouvez connaître la longueur de ce message et s'il y a la prochaine donnée.

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-17 17:57:50

    Vous pouvez vous référer au
    Int32StringReceiver

    de Twisted

    répondre
    0
  • Annulerrépondre