想用UDP搞局域网内组播,
但是有一个问题现在没有搞明白
那就是,在传输数据的时候,
我如果直接把1M的 数据放在SINDTO的缓冲区里头
那么因为UDP传输会有失帖的可能性,
请问,如果丢失的话,是丢失全部的1M还是1M里头的某个贴呢???
我想做的视屏传输方面的,呵呵,谁有代码???

解决方案 »

  1.   

    UDP传输的是报文格式,因此丢失的将是SendTo中的数据,如果你把1M内容分隔发送,则可能会丢失某些数据块,如果整一个1M数据发送,则可能丢掉1M的内容。建议你把数据分隔发送,在每个块中加上序号标记,以便接收方接收显示。
      

  2.   

    sendto每次发送一个ip数据报,而ip数据报的最大长度,包括报头,是2的16次方,即64k,所以一次发送超过这个值的数据,可能数据会发不出去,因为底层函数可能简单的视之为无效数据而将其丢弃。建议分次发送,到目的地再组装。
      

  3.   

    IP包的最大长度由MTU(最大传输单元)决定,一般为1518字节,包括MAC头,所以合理的传输数据包大小一般为1500字节。TCP、UDP协议属于传输层协议,它们可以自动完成数据包的分拆与重组功能。
    但是建议不要大于64k.如果出现丢包的情况,只会丢掉其中的一部分IP包。
      

  4.   

    谢谢楼上的各位大哥
    底层的这些,我只是稍微懂一些。
    现在主要是这样的:
    我只是搞数据传输这一块的
    别人只给我了一个SEND缓冲区,和一个RECIEVE缓冲区
    因为是搞流式传输的,所以他就是把数据放在SEND缓冲区里(对他来说就是一个帖)
    而我负责把数据送出去,
    而在接收方,需要判断一个贴(可能很大)的总长度,总长度域包含在(比如说这个帖的第三个字节)。
    这样如果接收到的数据等于总长度,就从这里开始接收第二个贴。
    但是问题,就是在这里:如果我送出去的贴整个都丢失了,那也无所谓。
    如果只是丢了这个帖的一部分,那么我并不知道,所以我还是根据这个贴的总长度来接收,这样的话,接收下个贴时,我去读第三个字节(总长度域)时,就肯定是错误的。
    不知道怎么办了???该怎么来做呢??(我是组播UDP)
      

  5.   

    接收端要不收到一个贴,要不收不到,不会出现收到一贴中的某一不份,因为UDP是报文传输协议。
      

  6.   

    udp传输还要涉及IP层分片的问题,而分片容易导致ip包丢失,所以一般将你要发送的数据分包(512字节/包),这样就大大的降低了包的丢失率。
      

  7.   

    MTU根据具体的网络而有所不同,
    以太网是1500B,令牌总线是8174B,FDDI是4470B