屏幕廣播的實現(三)


上次說到運用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

 

 

 

如圖。接收端只負責接收按順序傳送的數據包。其他的不處理。搜索

相關文章
相關標籤/搜索