Javaアプリケーションの1つでソケット通信を使用しています。プログラムが異常終了を検出した場合、リスニングポートは閉じず、「ポートはすでに開いています」というメッセージが表示されるため、プログラムを開始できません。 Doとにかくこの問題に対処していますか?この問題を処理する一般的な方法は何ですか?プログラム終了時にポートを閉じるにはどうすればよいですか?
8
A
答えて
22
あなたのプログラムはソケットでリッスンしているようです。通常、プログラムが終了すると、OSは開いているソケット(リスニングソケットを含む)をすべて閉じます。しかし、リスニングソケットの場合、OSはプログラムが終了してからしばらくの間(数分)ポートを予約して、未処理の接続試行を処理できるようにします。プログラムが異常終了した場合は、後でもう一度やり直してください。
この遅延時間を避けたい場合は、setsockopt()
を使用してSO_REUSEADDRオプションを使用してソケットを構成できます。これは、OSに、同じアドレスを再利用することが問題ないことを知っていることを伝えます。この問題は発生しません。
このオプションは、ServerSocket.setReuseAddress(true)
メソッドを使用してJavaで設定できます。
2
オペレーティングシステムは、JVMプロセスが終了したときに自動的にそのような処理を行う必要があります。ただし、ポートが閉じられるまでには少し時間がかかることがあります。
2
Handling abnormal Java program exitsに記載されているように、実際に明示的な操作が必要な場合は、Runtime.addShutdownHook()メソッドで特別な処理を行うことができます。
4
あなたが
http://java.sun.com/j2se/1.4.2/docs/api/java/net/ServerSocket.html#setReuseAddress(boolean)
を参照してくださいソケットにSO_REUSEADDRフラグを設定したいです関連する問題
- 1. アンドロイドのアクティビティ終了時にソケットを閉じるにはどうすればいいですか?
- 2. UWPアプリケーションをプログラムで終了または終了するにはどうすればよいですか? (Windows 10)
- 3. XCBで閉じるボタンでプログラムを終了するには
- 4. アプリケーション終了時にDelphiで匿名スレッドを終了するにはどうすればよいですか?
- 5. セッションの終了時に閉じるポップアップ
- 6. 閉じるデバッグセッションの終了時にEntityManagerFactory
- 7. 正常に終了するかクラッシュするたびにプログラムがソケットを閉じるのを確認するにはどうすればよいですか?
- 8. メッセージダイアログをプログラムで閉じるにはどうすればいいですか?
- 9. バットファイルを閉じて5分後にプログラムを終了する
- 10. IRBセッションを終了せずにデバッガを終了するにはどうすればよいですか?
- 11. 「すべて終了」後にnode.jsスクリプトを終了するにはどうすればよいですか
- 12. jquery.jmslideshow.js終了するにはどうすれば終了するのですか
- 13. vimperatorでビューソースモードを終了するにはどうすればよいですか?
- 14. Androidでタスクを終了するにはどうすればよいですか?
- 15. スタートアップフォームを閉じるとアプリが終了しないようにするにはどうすればよいですか?
- 16. 現在のブラウザウィンドウを閉じるとChromeデベロッパーツールが終了しないようにするにはどうすればよいですか?
- 17. 終了時にVisual Studioのすべてのファイルを閉じる
- 18. ブラウザを閉じずにブラウザウィンドウを閉じるにはどうすればよいですか?
- 19. フォームを閉じたときにアプリケーションを閉じるにはどうすればよいですか?
- 20. 終了タグを表示するにはどうすればよいですか?
- 21. フルスクリーンiframeを終了するにはどうすればよいですか?
- 22. アンドロイドアプリを終了するにはどうすればよいですか?
- 23. モバイルアプリを強制終了するにはどうすればよいですか?
- 24. プログラムで2.3以上でコールを終了するにはどうすればよいですか?
- 25. tempfile.mkstempからファイルを閉じるにはどうすればよいですか?
- 26. Javaで一定時間後に再帰を終了するにはどうすればよいですか?
- 27. Macアプリケーションをプログラムで終了するにはどうすればよいですか?
- 28. プログラムのすべてのプロセスを強制終了するにはどうすればよいですか?
- 29. アプリを閉じるにはどうすればよいですか?
- 30. メインウィンドウのタイトルバーの右上にある[閉じる]から[終了]に「X」機能を変更するにはどうすればよいですか?