识别客户
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
);
我有一个连接了多个客户端的服务器。我想确定每个客户发生了什么。为此,我需要特定客户的某种身份证明。
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
);