上次說到運用IP組播來實現一對多的數據傳輸。但UDP數據包的大小有限制,圖片需分塊傳輸,而且UDP是不可靠的協議。會出現丟包的現象。致使接收方不能接收到完整圖片。
一開始很天然的想到,那麼從新傳輸就是了。可是對於一對多的傳輸來講,仍是傳輸量太大。,最後通過在CSDN的搜索,找到一種方法.net
(CSDN地址http://download.csdn.net/detail/ztxzyr/3824829)。code
說的淺顯一點,就是發送端只管發,接收端判斷是否是一個完整的圖片數據~。經過一個結構體,帶有一個數據塊的各類信息。圖片
這是咱們組裏大神定義的一個結構體。get
#define MAXBUFSIZE (32 * 1024) //緩衝區最大值 //UDP數據包 typedef struct _UDPPACKAGE{ DWORD dwIndex; //當前包序號 DWORD dwTotalSize; //數據總大小 bool bFinish; //是否已結束 char buf[MAXBUFSIZE]; //數據緩衝區 DWORD dwDataSize; //緩衝區數據大小 }UDPPACKAGE, *PUDPPACKAGE;
假設一個圖片被分紅四部分。那麼四個數據都填充在四個結構體內,其中的dwIndex按照的順序。而且最後一個數據包中的bFinish爲true,其他三個爲false。發送端只管按照順序發,而接收端須要作的就是按照順序接收。當順序不對的時候則丟棄數據而且中止接收,直接接受下一張圖。直到數據包按照順序的發送過來而且接收到了true,則寫入數據。class
如圖。接收端只負責接收按順序傳送的數據包。其他的不處理。搜索