IdTcp控件在使用时,他会自动为每一个Client创建一个线程。那么在IdUdp中如何解决多个客户多条信息同时到来的情况?又如何标识是谁来的?

解决方案 »

  1.   

    >>那么在IdUdp中如何解决多个客户多条信息同时到来的情况
    通訊類的東西, 都會有緩衝區的, 處理不了的, 會先放在裹面!!
    一時沒查help, 每個線程都有個標識的啊!!如index, 裹面還會有對應的聯接方的信息!!
      

  2.   

    我在接收到客户的信息后,还要去做一定的处理,我想问使用idudp会不会出现由于去处理上一个信息而丢失某个以后发来的信息的情况
      

  3.   

    每个线程会有他响应的ThreadID,你可以同过TSocketServer 的ThredStart取到For example:procedure TServer.ServerSocketThreadStart(Sender:TObject; Thread:TServerClientThread)
    begin
      showmessage(inttostr(Thread.ThreadID));
      showmessage(inttostr(Thread.ServerSocket.ActiveThread));
      showmessage(inttostr(Thread.ServerSocket.IdleThreads));
    end;所以你就可以得到信息是来自那个线程。如果多个客户多条信息同时到来的话,服务器端就会为这些信息放进消息的队列中,逐条来处理。所以如果服务器足够快,并且信息不是很大的话,可以看作是"同时"
      

  4.   

    Wally_wu(沃利) 
    我是说在IdUdp控件中如何知道是谁来了
    我在它的OnRead事件中需不需要对同时到来的信息作程序上的缓存处理
      

  5.   

    OnRead事件已经封装了GetBinding方法,所以可以取到ABinding的值,然后取得数据是来直哪个IPFor Example:
    procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    var
      vIP: String;
    begin
      v1P := ABinding.Ip; 
    end;