我用IdUDPServer与IDUDPClient,每次Client向Server发送3个报文
在调试状态,Server每次都能常接收,但直接运行EXE后,会出现两种情况
1、正常,每次都能收到3个
2、异常,只能收到1个,且一定是最后一次
第1种情况比第2种情况多
这是什么原因?郁闷...

解决方案 »

  1.   

    udp协议是不可靠的协议,丢包很正常
      

  2.   

    我觉得不正常,UDP协议虽然是不可靠协议,但据一份比较权威的文档说它丢包的现象很少发生,甚至连接收数据包的次序都很少会乱的。楼主可能是代码有问题,把代码贴出来看看!
      

  3.   

    UDP丢包是正常,但不至于每次都丢失第一、二个包,只能收第三个包啊,我在想,是不是三个包发送速度快,结果后来的包覆盖了前面的包呢?这要怎么处理?我用INDYServer,好象不能像TCPServer一样,使用线程啊,如何处理?
    procedure TfrmMain.IdUDPSUDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    beginend;
      

  4.   

    这是代码,
    procedure TfrmMain.IdUDPSUDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    var
      sData: TStringStream;
      sl:TStringList;
      i: Integer;
    begin
      sData := TStringStream.Create('');
      sl := TStringList.Create;
      try
        sData.CopyFrom(AData, AData.Size);
        sl.Delimiter := G_DELIMITERCHAR;
        sl.DelimitedText := sData.DataString;
        if sl.Count = 0 then Exit;
    //判断是否已经存在了
    for i := 0 to G_App.Count - 1 do
     if G_App[i] = sl[0] then Exit; //G_App是一个结构体,为了方便说明,暂时用Stringlist代替
    G_App.Add(sl[0]);
      finally
        FreeAndNil(sData);
        FreeAndNil(sl);
      end;
    end;