1:公司要通过socket的方式请求服务器拿数据,recv返回回来后要判断数据是否完整,是否在完成一条后还有下一条数据,从没有写过沾包,想求助具体写法,返回数据的形式是 长度 code 内容。这个接收的方法单独起一个现成while 循环来跑 不停地跑
光阴似箭催人老,日月如移越少年。
資料有自己定義的協定嗎
自行參考下socket 的編寫;
提供一下思路:
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的數據加到一起去了哦~
使用自訂協定的話,在報文裡面增加一個長度字段,根據這個長度判斷就能知道本次報文的長度,以及是否有下一條資料。
可以參考Twisted的Int32StringReceiver
資料有自己定義的協定嗎
自行參考下socket 的編寫;
提供一下思路:
TCP黏包的必然是同一個對端peer, 這裡不對peer做處理,自己要對每個peer多同樣的處理
別把不同peer的數據加到一起去了哦~
使用自訂協定的話,在報文裡面增加一個長度字段,根據這個長度判斷就能知道本次報文的長度,以及是否有下一條資料。
可以參考Twisted的
Int32StringReceiver