マイソケットサーバは、これまでのところ非常に単純です:TCP C#ソケットサーバーで複数のアクティブな接続を処理する方法は?
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
のタブを続けるだろうし、特定のクライアントに他のスレッドから更新を送信されますか?例えば
、私はそれを放送するのではなく、そのクライアントに手を差し伸べるんどのように特定のクライアントのためのデータを、持っている場合は?または、クライアントがもはや接続されていない場合、どのように伝えることができますか?
ありがとうございました!
リストオブジェクトリストにクライアントを追加します。 –
jdweng
しかし、その後、どのように私はそのリスト内の特定れるtcpClientを参照していますか?どのように私はそれらを区別するでしょうか? – MrDysprosium
1つの方法は、クライアントのIPアドレスを使用することです。または、各クライアントにIDを与えます。 – jdweng