本人刚学indy TCP Server,疑惑一个问题:Server能判断是哪个IP发的数据吗?
比如a,b,c三台client给Server发信息,如果是a,就回复奖励100,是b,就奖励200,c就不回复。
Server能判断是那台client吗?是不是a,b,c给Server发数据必须包含自己的身份信息,让Server解析后判断?

解决方案 »

  1.   

    不需要的,TCPServer为每一个客户端连接单独建立了一个线程。
      

  2.   

    TCPSERVER 可以取出每个客户端的IP。
      

  3.   

    PeerIP就是对方的IP地址,绑定IP地址会有问题,因为现在都用DHCP,IP地址有可能会变,最好在协议中定身份信息。
      

  4.   

    procedure Send(AThread: TIdTCPClient; str: string);
    begin
    if form1.IdTCPClient1.Connected then begin
    AThread.WriteLn(str);
    end;
    //A机
    Send(AThread,'a');procedure TForm2.IdTCPServer1Execute(AThread: TIdPeerThread);
    var
      str: string;
    begin
      try
        str := AThread.Connection.Readln();
      except end;
      //
      if str = ‘a’ then begin
      AThread.Connection.Writeln('100');
      end;
    if str = ‘b’ then begin
      AThread.Connection.Writeln('200');
      end;
    if str = ‘c’ then begin
      //
      end;end;
      

  5.   

    如果a,bc都是固定IP可以通过peerip如果不是则需要发送身份信息
      

  6.   

    谢谢大家。有些明白了。
    也就是说,以下这个函数,每个链接都生成一个线程,同一时刻如果有两个会话,也是互不干扰的?
    procedure TfrmMain.ServerExecute(AContext: TIdContext);
    begin
    // Your stuff for OnExecute goes here.
    end;上面的函数是indy10的,和indy9完全不同,nydns朋友的这个例子是indy9的。上面的函数有个参数AContext,如何在这个函数里面接收数据并回复数据呢?