【发布时间】:2016-09-22 16:33:28
【问题描述】:
到目前为止,我的套接字服务器非常简单:
public static void listen()
{
TcpListener server = null;
IPAddress address = IPAddress.Parse("127.0.0.1");
try
{
server = TcpListener.Create(5683);
server.Start();
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace);
}
while (true)
{
Thread.Sleep(10);
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("Accepted Client");
Thread thread = new Thread (new ParameterizedThreadStart(SwordsServer.ClientHandler));
thread.IsBackground = true;
thread.Start(client);
}
}
public static void ClientHandler(object c)
{
TcpClient client = (TcpClient)c;
NetworkStream netstream = client.GetStream();
bool connected = true;
while (connected)
{
Thread.Sleep(10);
try
{
byte[] bytes = new byte[client.ReceiveBufferSize];
netstream.Read(bytes, 0, bytes.Length);
Console.WriteLine("got data");
netstream.Write(bytes, 0, bytes.Length);
}
catch (Exception e)
{
connected = false;
Console.WriteLine(e);
Console.WriteLine(e.StackTrace);
}
}
}
我的问题是,在概念层面上,您将如何关注每个唯一的 client 并将来自其他线程的更新发送到特定客户端?
例如,如果我有特定客户的数据,我如何联系该客户而不是广播它?或者,如果客户端不再连接,我怎么知道?
提前感谢您的帮助!
【问题讨论】:
-
添加列表对象 List
clients. -
但是我如何引用该列表中的特定 TCPClient 呢?我如何区分它们?
-
一种方法是使用客户端的IP地址。或者给每个客户一个 ID。