粘包 - python socket 沾包求助
大家讲道理
大家讲道理 2017-04-17 17:55:50
0
5
505

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

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

membalas semua(5)
左手右手慢动作

Adakah data mempunyai protokol yang ditentukan sendiri?

阿神

Sila rujuk sendiri tulisan soket;

伊谢尔伦

Berikan beberapa idea:

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

Paket TCP mesti melekat pada rakan setara yang sama tidak diproses di sini Anda perlu melakukan pemprosesan yang sama untuk setiap rakan setara

迷茫

Jika anda menggunakan protokol tersuai, tambahkan medan panjang pada mesej Berdasarkan panjang ini, anda boleh mengetahui panjang mesej ini dan sama ada terdapat sekeping data seterusnya.

洪涛

Anda boleh merujuk kepada Twisted
Int32StringReceiver

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan