问题是这样的:UDP协议。
       校园网络广播,服务器软件向每个教室的终端发送音频数据,大概每26毫秒发送一次,每次向200个终端发送(每个终端间隔30微妙左右),每帧的数据长度是512Byte,出现丢包现象,不算太严重。
       终端那边的程序应该没什么问题。因为每26毫秒发送一次,每次向50个终端发送(每个终端间隔30微妙左右),每帧的数据长度是512Byte,这样就基本上不出现丢包情况。
       想请教一下,怎样可以太多终端时,尽量避免这种丢包问题呢?

解决方案 »

  1.   

    不知道你这所谓不太严重是什么概念,你应该以发出多少包,收到多少包,做个压力测试,这样统计出个丢包比例,再来讨论。如果只是单纯的想解决丢包,可以用udp模拟tcp,这个有现成的库可以使用。另外如果你发送给所有终端的数据都是相同的话,一个广播包就可以。
      

  2.   

    估计超出了你的带宽。
    如果20毫秒的间隔,一秒钟差不多50个包。
    每个包512字节,考虑以太网包头14字节,ip包头20字节,udp包头8字节,总包头:42字节
    每秒发送:200个终端*50个包*(512+42)字节=5,540,000字节
    换算成bit,则相当于50M带宽。你的校园网有没有这么大带宽?
      

  3.   

    26毫秒,每秒发40个包左右 ,也没走校园网,自己组建了一个网,
    带宽需求大概35,456,000 BPS 打满也就36M了
      

  4.   

    doloopcn 方法我也想过,关键还需要考虑同步性,如果通过终端转发,出来的声音就变得不同步了
      

  5.   

    为什么不压缩一下呢   ilbchttp://www.cnblogs.com/doorsky/p/3266102.html
      

  6.   

    压缩完,终端那边又需要解压,终端用的是stm32F107的单片机,而且26毫秒一帧,有点悬啊
      

  7.   

    而且512Byte的音频数据已经是经过ADPCM压缩得出来的数据了;
      

  8.   

    发现QQ最小化时会连续丢几个包,不知QQ最小化触发了windows的什么事件。
      

  9.   

    做个流媒体服务端,udp只发送和接收开始和结束的命令
      

  10.   

    既然是广播又说什么50个终端, 使用UDP不等于使用广播,广播是一发多收的.
      

  11.   

    既然是局域网,为什么不直接用UDP广播,这样只发送一次就是了
    另开一个TCP服务,如果终端发现丢包(包序号不连续了),就通过TCP来取,这样的通讯压力就小多了