识别客户

Identification of clients

我有一个连接了多个客户端的服务器。我想确定每个客户发生了什么。为此,我需要特定客户的某种身份证明。

TcpClient tcpClient = (TcpClient)client;

 logger.DebugFormat("Connection obtained with a client {0} {1} {2} ", client.Connected, client.Client.LocalEndPoint,client.Client.RemoteEndPoint);

但我需要一个简单的整数,可以分配给客户端以供识别。每个连接的客户端的数字都会增加,因此我可以通过该数字识别哪个客户端在执行操作。我该如何处理?

您可以创建自定义 TcpClient class,它将具有 Id 类型 int 的字段。每次建立新的客户端连接(因此 TcpClient 的新实例可用)时,您必须创建 MyClient 的新实例并将这个新的 TcpClient 对象传递给它。静态计数器确保 MyTcpClient 的每个新实例都有 Id 增加 1

public class MyTcpClient
{
   private static int Counter = 0;

   public int Id
   {
      get;
      private set;
   } 

   public TcpClient TcpClient
   {
      get;
      private set;
   }

   public MyTcpClient(TcpClient tcpClient)
   {
      if (tcpClient == null)
      {
         throw new ArgumentNullException("tcpClient") 
      }

      this.TcpClient = tcpClient;
      this.Id = ++MyTcpClient.Counter;   
   }    
}

您以后可以将其用作:

logger.DebugFormat(
   "Connection obtained with a client {0} {1} {2} {3}", 
   myClient.Id, 
   myClient.TcpClient.Connected,   
   myClient.TcpClient.Client.LocalEndPoint,
   myClient.TcpClient.Client.RemoteEndPoint
);