就只有90分了,都放出来1.IdUdpServer  的active设置为true跟false有什么区别,好像都可以发送消息?2.
我在一个按钮里面 
发送消息 SendBuffer  然后又 ReceiveBuffer
我想知道有没有问题,对方发送消息过来了,那么是
ReceiveBuffer收到呢?还是在UDPRead(这个事件里面里面也有处理代码)
里面收到呢?还是怎么回事
搞不清楚高手讲讲他是怎么工作的,谢谢!

解决方案 »

  1.   

    //监听9000端口
    self.IdUDPServer1.DefaultPort:=9000;
    self.IdUDPServer1.Active:=true;
    //接收数据
    procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    var
      RevStream:TMemoryStream;
      AMsg:TFileMessage;
    begin
      if AData=nil then exit;
      RevStream:=TMemoryStream.Create;
      RevStream.LoadFromStream(AData);
      RevStream.Seek(0,soFromBeginning);
      RevStream.Read(AMsg,sizeof(AMsg);
      RevStream.Free;
    end;
    //发送数据
    self.IdUDPServer1.SendBuffer('192.168.0.1',9900,AMsg,sizeof(AMsg));
      

  2.   

    不用给我代码,给我解释就行了是不是Active:=true;后才启动IdUDPServer1UDPRead线程?还有就是当read接受,其他地方又用ReceiveBuffer接受,到底哪里接受到了?
    希望能给我解释清楚
      

  3.   

    1:是的,只有active:=true后在启动IdUDPServer1UDPRead线程
    2:两个地方不可能同时监听同一端口,会提示端口已被占用
    ---------------------------
    Debugger Exception Notification
    ---------------------------
    Project Project1.exe raised exception class EIdCouldNotBindSocket with message 'Could not bind socket. Address and port are already in use.'. Process stopped. Use Step or Run to continue.
    ---------------------------
    OK   Help   
    ---------------------------
      

  4.   

    通过TIdSocketHandle.SetSockOpt 可以设置SO_REUSEADDR参数可以绑定到已用端口。