sock 中的send和recv
生活随笔
收集整理的這篇文章主要介紹了
sock 中的send和recv
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在發送之前給在要發送的內容包前加一個頭部信息-->struct.pack('I', len(data)),這個頭部存儲的是這個要發送的數據包的大小len(data)
data = nsnode_info.SerializeToString()data = struct.pack('I', len(data))+dataret = sock.sendto(data, addr)接收數據此時指定接收的大小1024字節,為了防止發送的數據過大,造成數據丟失,那么進行循環recv(),判斷的條件是存儲的頭部信息,也就是發送的數據包的大小(pkSize + struct.unpack('I', data[:pkSize])[0])和當前接收到的數據包的大小比較,如果>=表示數據接收完畢,可以執行之后的操作,
data[pkSize:pkSize+struct.unpack('I', data[:pkSize])[0]]是去掉頭部信息后的數據包
sock發送信息不是一個send對應一個recv,可以是多個send組成一個包,recv一起接收,所以一個數據包中可以有多個頭部信息
data = data[pkSize+struct.unpack('I', data[:pkSize])[0]:]這是另一個包的去頭部信息的數據包
總結
以上是生活随笔為你收集整理的sock 中的send和recv的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: glassfish插件_安装和使用Gla
- 下一篇: TCP的request_sock与soc