首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

这个提示具体是什么意思啊如何解决啊高手帮帮忙,多谢

2012-06-06 
这个提示具体是什么意思啊,怎么解决啊?高手帮帮忙,谢谢EIDSocketError socket#10040 Error Message too lo

这个提示具体是什么意思啊,怎么解决啊?高手帮帮忙,谢谢
EIDSocketError socket #10040 Error Message too long

做语音聊天,网上的例子。用到ACM控件,通过IdUDPClient1传输。

procedure TcontForm.vN01Click(Sender: TObject);
 var format:pointer;
begin
  Try  
  If ipLabel.Caption='' then Showmessage('请先从右侧的列表中选择通话单位!');
  If ipLabel.Caption='' then Exit;
  //---选择语音格式
  format:=ACMDialog1.OpenDialog;
  If format=nil then Exit;
  //---开始对话 
  idudpClient1.Host:=ipLabel.Caption;
  idudpClient1.Port:=8011;
  idudpClient1.Active:=True;
  ACMWaveIn1.Open(format);
  Except End;
end;

procedure TcontForm.ACMWaveIn1Data(data: Pointer; size: Integer);
 var pchData:pChar;
  memStream:TMemoryStream;
begin 
  Try
  pchData:=pchar(data);
  If pchData[1]='' then Exit;
  //---接受麦克风语音
  memStream:=TMemoryStream.Create;
  Try
  memStream.Write(pchData^,size);
  idudpClient1.SendBuffer(memStream.Memory^,memStream.Size);
  Finally
  memStream.Free;
  End;
  Except End;
end;

procedure TcontForm.vN02Click(Sender: TObject);
 var format:pointer;
begin
  Try
  //---设定UDPServer监听8011端口
  idudpServer1.DefaultPort:=8011;
  idudpServer1.Active:=True;
  //---同时设置音频格式
  format:=ACMDialog1.OpenDialog; 
  If format=nil then exit;  
  ACMWaveOut1.Open(format);
  Except End;
end;

procedure TcontForm.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle); 
 var a:array of char;
  s:string;
  pcharplaystr:pchar;
begin 
  Try
  //---播放接收到的数据
  Showmessage('3');
  SetLength(a,AData.Size);
  AData.ReadBuffer(A[0],AData.Size);
  s:=PChar(@A[0]);
  pcharplaystr:=pchar(s);
  Showmessage('4');
  ACMWaveOut1.PlayBack(pcharplaystr,AData.Size);  
  Except End;
end;


[解决办法]
发送/接收buffer不够大引起的。用setsockopt将socket的send/recv的buffer加大

热点排行