2010-10-12 73 views
1

python可以區分發送的數據包嗎?例如拆分python數據包?

蟒接收數據

它處理數據

客戶發送第一分組

客戶端發送第二分組

蟒接收數據,我可以接收第一分組而不是所有的信息在緩衝區

我知道我可以設置它,所以它發送數據我確認和客戶端不會發送更多的數據我T I證實,已處理過的最後一塊,但我寧願不

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
sock.bind(("", 2000)) 
sock.listen(5) 

所有相關的套接字數據

回答

1

基本上有兩種方法:

  1. 在每個分組的開始,發送一個整數,指定包有多長。當您接收到數據時,首先讀取整數,然後再讀取更多字節作爲第一個數據包。

  2. 發送數據包之間的某種特殊標記。這隻有在你能保證標記不能在分組內發生的情況下才有效。

由於·洛指出,你也可以使用UDP(這是基於數據包的),而不是TCP(這是基於數據流的),但你放棄TCP提供的其他功能(重發丟包,順序包和擁塞控制)。編寫自己的代碼進行重傳並不難,但擁塞控制難以正確進行。

0

有沒有辦法Python中的數據包可以區分正在發送?

是的。使用UDP而不是TCP。

0

Netstring是一種簡單的序列化格式,用於發送數據包的格式爲 。每個 數據包的格式爲 'length:data'。 http://en.wikipedia.org/wiki/Netstring

像 扭曲的Python網絡框架有 淨字符串的直接支持。