3

c# を使用して、Windows サービスで tcp リスナーを使用して 1 つの tcp サーバー アプリケーションを開発しています。

サービスを開始すると、正常に動作し、新しいクライアントを受け入れます。新しいクライアントがサーバーに接続しようとすると、しばらくすると次の例外が発生します。

接続に失敗しました。サーバーは起動していますか? ターゲット マシンがアクティブに拒否したため、接続できませんでした。

その時点で、サービスは実行中の状態のみです。

TCP サーバーが listen 状態にあるかどうかを確認するにはどうすればよいですか?

4

4 に答える 4

1

サーバーがまだ実行中であり、リッスン ソケットを閉じていない場合、サーバーはまだリッスン状態にあります。ただし、プラットフォームが Windows で、サーバーのバックログ キューがいっぱいの場合、Windows はそれ以上の接続を拒否します。これは、サーバーが新しい接続を受け入れるのが遅いことを意味します。

于 2012-06-23T07:06:23.717 に答える
1

netstat -ab

このコマンドは、すべてのアクティブな接続に関する情報をプログラムの名前とともに提供します。

別のオプションは、Mark RussinovichのTcpViewです。

于 2012-06-23T06:39:54.057 に答える
0

サーバーがリッスンしているかどうか、サーバーが Windows かどうかを確認したい場合は、単純に使用できます (たとえば、8888 がリッスン ポートです)。

netstat -ano|findstr "8888"

次に、サーバー インスタンスの PID が表示されます。

さらに、TCP 接続の試行が失敗した理由を確認したい場合は、Wiresharkを使用してサーバーとクライアント間のすべての TCP パケットをキャプチャできます。その理由は非常に明確です。

たとえば、サーバーが開いているソケット数の制限に達した場合、クライアントからサーバーへの SIN と、サーバーの応答が表示されます。

于 2012-06-23T06:50:11.127 に答える
0

プログラムによるものかどうかはわかりませんが、後者の場合は telnet: telnet host port を試すことができます

telnet yahoo.com 80
telnet localhost 3306

于 2012-06-23T06:39:42.433 に答える