UDP 传输,因为包比较大,所以进行了分包,很简单的分包算法.每个分割包的大小是固定的..但最后一个包可能没有达到固定大小..我现在是直接补齐到固定大小发送出去.这样感觉有点浪费..网络流量增加很多.每次都是整个包直接发出去,接收端接收固定大小,然后分析数据,这样就算丢包也无所谓,我做的是视频传输.如果是变长的的话,只能采取包头和包体分开的...根据包头指定的大小,来接收后面的包内容..但又怕如果正好包头丢了,那后面接受的数据就整个乱了...请问大家有没有什么好的方法,来处理这个问题....好郁闷啊..

解决方案 »

  1.   

    UDP,对于发送端,不需要固定长度,但是要确定最大长度.对于接收端,则要以最大长度接收,处理数据时按实际收到的大小处理即可.
      

  2.   

    UDP数据报的长度应该是规定个最大的就好了吧,或者你干脆加一些确认的字段进行确认好了 
      

  3.   

    to 1楼
    实时P2P传输的,发出去就不管了..这个再重发,感觉有点麻烦..to 2楼
    这个我测试过..可能是因为是实时传输的吧,用最大长度接收时,会收到下一个包的部分内容.这个我再测试一下,如果是这样的话,会简单很多.to 3楼
    如果丢包的话,和前面的数据长度就可能对不上了to 4楼
    我规定的是1K,后半句话没明白啥意思..
    谢谢大家帮忙..可能是想得太多吧..再想想..
      

  4.   

    如果数据足够大,比如1M以上,分成1K一包,大不了多出1k字节,千分之一的浪费应该可以接受。不然的话就把单包大小再缩减。消息头+消息体的话,可以考虑增加应答来控制重发,这样的话还不如用tcp来得方便。
      

  5.   

    数据包也不是太大,1K到4K不等,因为超过MTU了,所以进行分包了...15fps以上,这个浪费很大的.貌似TCP打洞很难的说..----------------------
    现在的解决方法是,发送方就按实际大小发.
    接收方,一直接收固定长度大小的内容,缓存个几秒. 
    然后处理缓存,找出一个个完整地包..总感觉写的有点麻烦..