0

私は現在、ソケットで接続を開き、クライアントをリッスンしているac#プログラムに取り組んでいます。

TcpListenerに現在接続されているクライアントがあるかどうかを確認するにはどうすればよいですか。これを実行したいので、誰かがコンソールアプリケーションを閉じると、接続されているものを終了するのではなく、接続されているすべてのクライアントが終了するのを待ってからコンソールアプリを終了します。

以下はコードです:

TcpClient client = listener.AcceptTcpClient();
                if (client.Connected)
                {
                    library.logging(classDetails + MethodInfo.GetCurrentMethod().Name,
                        string.Format("Client Connected: {0}",((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString()));
                    NetworkStream stream = client.GetStream();
                    byte[] data = new byte[client.ReceiveBufferSize];
                    int bytesRead = stream.Read(data, 0, Convert.ToInt32(client.ReceiveBufferSize));
                    string request = Encoding.ASCII.GetString(data, 0, bytesRead);
                    byte[] msg = System.Text.Encoding.ASCII.GetBytes("200 OK");
                    ProcessXML process = new ProcessXML(library, appSettings);

                    // Send back a response.
                    stream.Write(msg, 0, msg.Length);
                    process.processXML(request, ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString());
                    client.Close();

接続されたクライアントの数を取得するメソッドがTcpListener内にありますか、それともリスト配列などにクライアントを追加し、クライアントが閉じたときにそれを削除することによって、これを自分で管理する必要がありますか。

4

1 に答える 1

1

私の知る限り、TcpListenerは、受け入れられた接続を内部的に追跡しません。これは、必要に応じてアプリケーションによって明示的に実行される必要があります。

于 2012-05-31T22:04:40.990 に答える