前回のやり方だと、インスタンスを生成する際に引数に値を渡してしまっているので、
初めの接続で応答待ちが発生してしまう、と。
で、TCPClientのインスタンスを生成してからタイムアウト時間を設定して、
それから接続。という方法でやってみたのですが、それもうまくいかず…。
タイムアウトがうまく働かないと嘆いていたら代用のコードの書き方を教えていただきました。
private ManualResetEvent _connect = new ManualResetEvent(false); /// <summary> /// コネクションを開く /// </summary> public void ConnectOpen() { ConnectingHostName = ServerHost; _connect.Reset(); _tcpClient = new TcpClient(); _tcpClient.BeginConnect(ServerHost, UserPort, new AsyncCallback(ConnectCallback), _tcpClient); if (!_connect.WaitOne(5000)) { _tcpClient.Close(); throw new SocketException(); } _networkStream = _tcpClient.GetStream(); } private void ConnectCallback(IAsyncResult result) { _connect.Set(); }
接続してから、WaitOneで設定したミリ秒が経過すると、
通信エラーを返すので、それをキャッチして処理する。
でも結局ソケットを使うことになったらしいので、TCPClient使わないんですよねって話←
それにしても…、ホントにいろいろな書き方があるんですね、すごいなぁ。