各位老大,我的问题很简单,在局域网上调试,一台装udp调试助手,我的程序在另一台上接收,问题是:对方必须连续发2次数据,且我这边只能收到第2次的数据,用状态条显示进行调试跟踪procedure TForm1.ServerUDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
  var
  txt:pchar;
  count:integer;
  fromip:string;
  fromport:integer;
  
  begin
  count:=1024;
  getmem(txt,1024);
  zeromemory(txt,1024);  statusbar1.SimpleText:='111';
  server.ReceiveBuffer(txt^,count,fromip,fromport);//问题出在这里,  statusbar1.SimpleText:='222';
  memo2.Lines.Add(fromip+':'+inttostr(fromport)+' '+txt);end; 对方第1发送时,这边能状态条显示'111',然后对方再发一次数据,这时状态条显示'222',然后对方继续发送,状态条又是'111',然后又是'222'......
  这就说明第1次接收是程序没有运行server.ReceiveBuffer(txt^,count,fromip,fromport);
  到第2次接收时,server.ReceiveBuffer()运行了,但是第1次的数据没有接收,只接收了第2次的数据,
  哪位能指点指点吗?
  先谢了

解决方案 »

  1.   

    问题算是基本搞定了,把indyserver里的server.ReceiveBuffer()换成abinding.RecvFrom(txt^,count,2,fromip,fromport);但是第1次的数据还是收不到,只能收从第2次数据起,算了,就只能这样了,现在还有点问题,
           如果第n次接收数据是2字节,而第n+1次突然有10字节,那么第n+1次收到的数据就只有2~3个字节,其余的字节就丢失了,
           而如果第n次是10字节,而第n+1次差不多也是10个左右,那么第n+1次收到的数据就不会有丢失的现象,这是为什么?
           是udp本身传输的局限吗?