用Indy的TIdTCPServer开发服务器程序时,当有多个客户端为往服务器发送数据时,我要根据不同数据内容作判断,转发到特定的客户端(即转发到一个已知IP的客户端)。该如何实现,多谢了!!!!

解决方案 »

  1.   

    TIdTCPServer对每一个客户端连接都开了一个新的线程,你只要在这个方法里接收和发送数据就行了。IdTCPServer1Execute(AThread: TIdPeerThread);例:接收数据:
       AThread.Connection.ReadFromStack;
       len1 := AThread.Connection.InputBuffer.Size;
       athread.Connection.ReadBuffer(buf,len1);
       发送数据:
       athread.Connection.WriteBuffer(buf,high(buf1)+1,true);
      

  2.   

    如果你是想要把一个客户端发来的数据转发到另一个客户端,那么就不是这种单向 C/S模式能够解决的。每个机器同时具有服务器和客户端模式. 如下:转发服务器     客户机A       客户机BTCPServer <---- TCPClientTCPClient  -------------->  TCPServer
      

  3.   

    那再请问,我要对  客户机A 发来的消息作判断(例如:如果发过来的是'ok'),那就向一些特定的客户机(例如:客户机B、客户机C等)发送一个“成功”字符串。那应怎样实现。客机有很多,如:A,B ,C,D,E,F,G等,但我只向B和C发送。在dTCPServer1Execute(AThread: TIdPeerThread);里怎样判断才能只身B和C发送消息呢?我不想向所有的客户机都发送消息。
      

  4.   

    TThreadList,管理各个客户端线程
    看一下demo,里面已经实现了你的功能
      

  5.   

    跟List一样用,加入了锁定,用的时候首先Locklist