0

単純なクライアント/サーバー アプリケーションをテストしています。クライアント側の単体テストではサーバーを起動する必要がありますが、ハングしているようです (個々のテストは機能しますが、複数のテストは機能しません)。

TearDown() の一部として、サーバー ソケットを閉じたほうがよいと考えましたが、クライアント コードからサーバー オブジェクトにアクセスする方法がないため、単純なことはできません。 serverSocket.close()。そうは言っても、ポート番号だけでソケットが実行されているポート番号を知っています。ソケットを使用しているオブジェクトがどこに/どのように存在するかに関係なく、ソケットを閉じることは可能ですか?

おそらく些細な質問で申し訳ありません...ありがとう...

別の関連する質問は...既に使用されているポート番号に基づいてソケットを作成できますか?

4

2 に答える 2

0

ソケットがプロセス内にある場合、できることは、すべてのファイル記述子を 0 から 0 まで繰り返し処理し、それぞれをgetrlimit(RLIMIT_NOFILE)呼び出すgetsockname()ことです。呼び出しが成功し、ポート番号が一致する場合、ポート番号によってソケットが見つかりました (ただし、同じポート番号を持つ複数のソケットが異なるアドレスにバインドされている可能性があることに注意してください)。

于 2013-03-28T15:11:48.930 に答える
0

いいえ。サーバー ソフトウェアでポートを閉じる必要があります。

他の唯一の代替手段はサーバーを強制終了することです。lsof または netstat でポートが開いているプロセスを特定し、そのプロセスを強制終了できます。ただし、これはポートを解放する残忍な方法です。あなたの場合、ソフトウェアがハングしないように修正する方がはるかに良いでしょう!

于 2013-03-28T14:25:16.490 に答える