本帖最后由 VisualEleven 于 2011-01-30 08:40:55 编辑

解决方案 »

  1.   

    如果你的应用可以允许丢包 可以:
    放在一个缓冲里
    这个缓冲逻辑上是循环的[code = 示意]
    比方你给每个包的序号是 1 2 3 4 5 6 7
    你就开辟一片缓冲[1 2 3 4 5 6 7]
    [/code]
    现在接收端接收到 5 ,那么它会认为 6 7 1 才可能晚于5发的包 ,如果接到 2 3 4 ,比方 4 ,认为是之前(早于5)发的包,仅仅存入缓冲 4
    如果接到 7 ,会认为是晚于5发的包 ,存入缓冲 7 后 将pNow 移动到7 (因为向前移动了两格 ,所以 返回 缓冲里 2 3 两格数据)如此 只要你缓冲区大于一定的长度, 收到的数据经过这个缓冲机制 返回的这些值就是 纠正了顺序的数据了(而掉包的就未填充)
      

  2.   

    建议使用滑动窗口机制,如果学过网络的话应该知道吧,滑动窗口本来是解决协议层的包传送问题,但也可以用来解决你的UDP的传送问题。这个算法很好,不过有些复杂,需要些耐心去看。
    参考:http://blogold.chinaunix.net/u1/58901/showart_2099013.html,上面有很详细的介绍。
      

  3.   

    楼主你的还是用TCP吧。看你的需求是不允许丢包啊
    如何你要自己实现一个丢包重发的机制那效率应该没有TCP高吧
      

  4.   

    http://blog.csdn.net/wwwllg/archive/2011/01/25/6162338.aspx
      

  5.   

    感谢各位的回复,我的需求是进行IP多播,传送的是一张图片,因为是IP多播,所以选择UDP.
      

  6.   


    谢谢,以前学习TCP/IP的时候看过,不过没太深入,我会再好好去看看!