私は、TCPを使用してお互いに接続する2つのアプリケーションを開発中です。ある時点でTcpClientを使用して接続しようとしていますが、他のアプリはTcpListenerを使用してまだリスンを開始していない可能性があります。サーバが例外処理なしでリッスンしているかどうかを確認する方法
私の最初の試みは、このでした:
TcpClient c = null;
while (true)
{
try
{
c = new TcpClient();
c.NoDelay = true;
c.Connect(ip, port);
break;
}
catch (SocketException ex)
{
Console.WriteLine(string.Format("Could not connect to {0}:{1}, retrying...", ip, port));
Thread.Sleep(500);
}
}
しかし、これに伴う問題は、私はVSは、任意のスローをキャッチするように設定されているので、それは、私にとっては迷惑のビットである例外処理に依存しているということです例外(「デバッグ - >例外...」メニュー)。だから、接続しようとするたびに、それはVSに壊れて、私は続行を押す必要があります。
私が手に例外がある:対象のコンピュータによって拒否されたため
接続が確立されていないことができ、私がチェックする方法があるだろうと想像127.0.0.1:50000
サーバーが実際に接続しようとせずに特定のポートでリッスンしている場合。私はちょうど十分なものではないということを理解しています。サーバはチェックと接続の試行の間に落ちるかもしれませんが、私が開発している間はまだそれがずっと優れています。
またはこのような何か:これに類似
TcpClient tcpClient = new TcpClient();
while (!tcpClient.TryConnect(....))
{ Thread.Sleep(1000); }
:
if (bool.TryParse("false"))
{ ... }
私はまた、手動で非同期メソッドを使用して(/エンド接続を開始します)とManualResetEventのタイムアウトを設定しようとしたが、そのどちらもうまくいきませんでした。私はインターネットを精査しましたが、私はこの問題の解決策を見つけることができませんでした。それは私が最終的にここに投稿している理由です:)
(トピックを少しビットオフ):私は、bool.TryParseとParseの内部動作が同じである(つまり、同じ方法で文字列をチェックする)ことを前提としています。入力。そうではないと言っていますか? – Srekel
@Srekel私の改訂版の回答を参照してください。 –