/// <summary>サーバ起動 - listenerスレッド関数</summary> private void ListeningTCP() { // スレッドID int managedThreadId = Thread.CurrentThread.ManagedThreadId; try { // 本サンプルでは、Loopbackの9999ポートをListening this.Listener = new TcpListener(new IPEndPoint(IPAddress.Loopback, 9999)); // Listening開始 this.Listener.Start(); // Listening開始を表示 this.SetResult_Svr( string.Format( "Listening開始! - ThreadId:{0}", managedThreadId)); // 終了させるまで延々と読み続ける。 while (!this.End) { TcpClient tcpClient = this.Listener.AcceptTcpClient(); //(待機) // クライアントは受信待ち時間を設定する。 tcpClient.ReceiveTimeout = 3 * 1000; // 得たTCPコネクションを処理する。 // TCPコネクションは、TCPCnnHndrで処理。 TCPCnnHndr tcpCnnHndr = new TCPCnnHndr(); tcpCnnHndr.TCPCnn = tcpClient; //tcpCnnHndr.TCP_Window = this; tcpCnnHndr.SetResult_Svr = new CmnClass.SetResultDelegate(this.SetResult_Svr); // ※ 必要であれば、\Asynchronousのサンプルを参照して // 起動数制御、ThreadPool化、キューイング数の制御を追加しても良い。 // Threadを生成してThread関数(tcpCnnHndr.invoke)を実行 Thread th = new Thread(new ThreadStart(tcpCnnHndr.invoke)); th.Start(); } } catch (Exception ex) { // エラーを表示 this.SetResult_Svr( string.Format("({0})エラー:{1}", managedThreadId, ex.ToString())); } finally { if (this.Listener != null) { // Listening停止 this.Listener.Stop(); } } // Listening停止を表示 this.SetResult_Svr( string.Format( "Listening停止! - ThreadId:{0}", managedThreadId)); }