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