上次说到运用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
如图。接收端只负责接收按顺序传送的数据包。其他的不处理。搜索