粘包
粘包主要是因為接收方不知道一次性提取多少字節的數據所造成的
解決粘包的方案:自定義報頭
第一種方法:發送方先用報頭傳輸數據的長度再發送數據,接受方先接受數據的長度信息再根據長度信息來獲取知道獲取的長度等于總長度
第二種方法:自定義復雜報頭? 完成發送一些額外的信息。先將要發送的額外數據打包成一個字典,將字典轉為bytes類型,計算字典的bytes長度并發送,再發送字典數據,最后發送真實數據
#先把需要的信息打包成一個字典 dic = {'name':'博客園','md5':'3714718355''len':1035} #字典轉字符串 head_dic = str(dict) bytes = head_dic.encode('utf-8') #先發送這個字典字符串的長度 dic_len = len(head_dic) #將長度轉化為字節 bytes_len = struct.pack('i',dic_len) #發送報頭的長度 c.send(bytes_len) #發送真實數據 c.send(bytes) 注意:TCP只能傳字節 示例?
轉載于:https://www.cnblogs.com/xiamenghan/p/9918041.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: [ NOI 2002 ] Robot
- 下一篇: linux 安装tar 命令