没做过这方面的,不太懂.
在这里用udp协议不太合适吧?或者应该加些管理之类的.
声音文件压缩了吗?

解决方案 »

  1.   

    你最大的问题可能如下:包过大,UDP在收发连续数据上很弱,请将一个大包拆分后传输
    如果一个包超过1600,即某些ADSL或者拨号网络的MTU值以上的话很可能就被丢弃了。
    请将每个包的大小控制在1000左右,而且请保证这些小包可以顺利的传递语音信号。
      

  2.   

    另外这种用法是错误的:ABinding.SendTo(Enter_user[i].PeerIP,Enter_user[i].PeerPort,mdata,Adata.Size); 
    如果你需要将数据传回到B\C\D,不要使用ABinding
    而要使用IDUDPSERVER.send,否则ABinding应该只会发送给Binding的对象
      

  3.   

    我试用过IDUDPSERVER.send的方法了。也不是行。而且很卡。
    一对一对没有问题。可是一对多就不行了。延时延的厉害
      

  4.   

    To:yuyuhaso 
       IDUDPSERVER.send这种方法也不行,还有您说的包过大。现在UDP一次应该发130个Char音频包!ACM一次采集就是130个Char,还须要把这130个char分两次发吗?由留下您的QQ或是其它的联系方式吗?想向你请教下吧。
      

  5.   

    130个CHAR是绝对可以发送的,那么就只有一个问题了,就是你分发的写法有问题,我的联系方式站内给你留信了
      

  6.   

    procedure Udpserver.onRecived(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
     var DataStringStream: TStringStream;
    begin
     DataStringStream := TStringStream.Create('');
     DataStringStream.CopyFrom(AData, AData.Size);
     memo1.lines.add(DataStringStream.DataString);
    end;
    你先跟踪一下吧看看数据来去是不是正常,我明天可能要中午才能睡醒了,嘎嘎
      

  7.   

    我仔细看了一下,你既然已经为每个用户纪录了ABinding,那么就用这个ABinding发送信息就行了,Enter_user[UserCount]:=ABinding; 
    用ABinding.send就行了,不用写IP,PORT
      

  8.   

    感谢大家回复,特别感谢yuyuhaso!
    须要学习的知识太多了。
    Good Good Study,Day Day Up!