多播收发已搞定了,但客户提出必须可靠!因为多播数据的接收顺序可能不是先发先到,数据也不一定正确,数据也可能会丢失有请各位Thinking...

解决方案 »

  1.   

    噢!我没太看懂, 对于一台机器来说, 发的数据包应该是按顺序到的, 以前我用多播传视频数据
    也没问题啊,   比如 a 发多播数据 给 b  ,c  , 楼主的意思是, b 收 a 发的多播数据时, 有可以不是a 发
    的数据包的顺序, 是这个意思吗?
      

  2.   

    To:HanZhu1
    不是这意思,我想说的是:Server按顺序多播发出的数据A,B,C...,在Client端接收时顺序可能会变成B,A,C...(这种情况可能发生吗?我也没测试过,测试也很难发现,因为它的概率小)。如果这样在Client没有校验就马上处理接收到的数据就会丢失数据。
      

  3.   

    请问多播你们是如何实现的.我只能在局域网里可以.如果要在internet网上就没法实现!!! 请教!
      

  4.   

    头几天我也测了一下,多播数据的收发也是只能在局域网中进行!希望是我测错了。不过有一点可以肯定,既然是多播,那肯定是udp连接。udp本来就是不可靠的,发送的多播数据出现乱序或者丢失都是不可避免的。要想可靠那就用tcp,但就不能用多播了。如果想发现多播数据是否乱序可以设置时间戳,按时间戳的大小来比较就可以了。至于出现丢包那就没办法了。
      

  5.   

    据了解,如果想获得Internet支持,就得Internet商家的支持,要跨网段。
      

  6.   

    我也做过一个多播通信的软件,多播是使用udp包,所以如果跨网段有可能数据包的先后顺序和发出的是不一致的。如果你确认能够保持顺序一致,那么要验证数据的正确性,可以使用CRC32来验证,而且,要你需要对数据进行编码,这样才能在接收端对收到的数据包进行验证。
    关于编码的问题,如果你没有经验,那么请自己找资料看下基本的原理,客户如果要求不高,那只要用简单的编码算法就可以了。还有理论上CRC验证是不能保证100正确的,但是实际使用中是能够满足一般要求的。
      

  7.   

    设置socket 的ttl选项没,如果不设IGMP缺省会把它丢掉, 不能跨网段
      

  8.   

    You can read the PGM(Pragmatic General Multicast),may be you can get some ideas
    but multicast based on UDP,it's……
      

  9.   

    数据包举个简单例子:包头|包体包头和包体的格式根据需要自己定义(可以参考一些网络协议的数据包定义方式)可以在包体(最后)中加入4个字节crc32校验码
    客户端收到时进行crc验证
    crc验证的具体原理可以在网上找到
    crc验证的源代码网上到处有还不明白就去找资料吧 这个是不能懒惰的