/// <summary> /// コンストラクタ /// </summary> public ClientWindow() { InitializeComponent(); // ログがリストボックスに表示されるようにする。 this.DataContext = this.LogCollection; this.AddLog("***** クライアントアプリケーション開始 *****"); //var lcAddr = new IPAddress(new byte[] { 192, 168, 150, 131 }); var lcAddr = new IPAddress(new byte[] { 192, 168, 25, 100 }); var lcPort = 65000; var lcEndPoint = new IPEndPoint(lcAddr, lcPort); //var rmAddr = new IPAddress(new byte[] { 192, 168, 150, 132 }); var rmAddr = new IPAddress(new byte[] { 192, 168, 25, 85 }); var rmPort = 65000; var rmEndPoint = new IPEndPoint(rmAddr, rmPort); try { this.tcpCommunicator = new TcpCommunicator(lcEndPoint, rmEndPoint); this.tcpCommunicator.DataReceived += TcpCommunicatorDataReceived; this.tcpCommunicator.ExceptionHappened += TcpCommunicatorExceptionHappened; var msg = "サーバに接続しました。(Local側IP:" + lcEndPoint.Address.ToString() + ", ポート:" + lcEndPoint.Port.ToString(); msg += ", Remode側IP:" + rmEndPoint.Address.ToString() + ", ポート:" + rmEndPoint.Port.ToString() + ")"; this.AddLog(msg); } catch (Exception ex) { var msg = "サーバとの接続に失敗しました。(" + ex.GetType().ToString() + ":" + ex.Message + ")"; this.AddLog(msg, LogRecord.WarningLevel.Error, ex.StackTrace); return; } this.encoding = Encoding.UTF8; }
/// <summary> /// 接続待受けスレッド /// </summary> /// <param name="iResult">非同期処理の結果を指定します。</param> private void AcceptCallback(IAsyncResult iResult) { var listener = this.tcpListener; TcpCommunicator communicator = null; try { lock (listener) { // クライアントと接続 communicator = new TcpCommunicator(listener.EndAcceptTcpClient(iResult)); } // クライアント接続を通知 this.OnTcpCommunicatorConnected(new TcpCommunicatorConnectedEventArgs(communicator)); if (communicator.IsConnected) { // 接続が維持されている場合はリストに追加する。 communicator.Disposing += CommunicatorDisposing; this.tcpCommunicatorList.Add(communicator); } else { // 接続イベント内で切断された場合は破棄する。 communicator.Dispose(); } } catch (Exception ex) { var msg = "接続待受け処理で例外が発生しました。(" + ex.GetType().ToString() + ":" + ex.Message + ")"; var exception = new ApplicationException(msg, ex); this.OnExceptionHappened(new ExceptionHappenedEventArgs(exception)); } }
/// <summary> /// プログラム終了時の処理を行います。 /// </summary> /// <param name="sender">イベントを送信したオブジェクトを指定します。</param> /// <param name="e">イベント引数を指定します。</param> private void WindowClosed(object sender, EventArgs e) { if (this.tcpCommunicator != null) { this.tcpCommunicator.DataReceived -= TcpCommunicatorDataReceived; this.tcpCommunicator.ExceptionHappened -= TcpCommunicatorExceptionHappened; this.tcpCommunicator.Dispose(); this.tcpCommunicator = null; } }