我在我的一個Java應用程序中使用Socket通信。我知道如果程序遇到任何異常終止,監聽端口不會關閉,並且程序無法啓動,因爲它報告「端口已經打開..」 無論如何我可以解決這個問題?用於處理此事的一般方法是什麼?如何在程序終止的情況下關閉端口?
8
A
回答
22
這聽起來像你的程序正在監聽一個套接字。通常,當程序退出時,操作系統將關閉所有可能打開的套接字(包括偵聽套接字)。但是,對於監聽套接字,操作系統通常會在程序退出後將端口保留一段時間(幾分鐘),以便處理任何未完成的連接嘗試。您可能會注意到,如果您異常關閉程序,稍後再回來就會啓動。
如果您想避免延遲時間,可以使用setsockopt()
來使用SO_REUSEADDR選項配置套接字。這告訴操作系統,你知道重新使用相同的地址是可以的,而且你不會遇到這個問題。
您可以使用ServerSocket.setReuseAddress(true)
方法在Java中設置此選項。
2
當JVM進程結束時,操作系統應該自動處理這些事情。不過,在港口關閉之前可能會有短暫的延遲。
2
如Handling abnormal Java program exits提到的,你可以設置一個Runtime.addShutdownHook()方法涉及任何特殊情況下,如果真的需要一個明確的操作。
4
你想設置SO_REUSEADDR標誌插座上
見http://java.sun.com/j2se/1.4.2/docs/api/java/net/ServerSocket.html#setReuseAddress(boolean)
相關問題
- 1. 如何在不終止程序的情況下關閉tkinter窗口?
- 2. 如何在不殺死xxxxx進程的情況下關閉xxxxx.exe終端窗口?
- 3. 如何在不關閉終端的情況下退出SimpleHTTPServer?
- 4. 如何在不關閉主程序的情況下關閉jframe
- 5. 如何在不關閉整個程序的情況下關閉窗口?
- 6. 如何在不關閉窗口的情況下關閉文檔?
- 7. 如何讓Visual Studio在程序終止時不關閉終端窗口?
- 8. 如何在不終止程序的情況下拋出異常
- 9. 如何在不終止主(調用)程序的情況下關閉另一個具有JFrame.EXIT_ON_CLOSE的swing程序
- 10. 如何在不退出主程序的情況下關閉彈出窗口
- 11. 如何在不關閉標籤的情況下關閉UI5應用程序
- 12. 如何在不終止程序的情況下禁止類的對象創建?
- 13. 如何在Linux Bash腳本終止時阻止終端窗口關閉?
- 14. 如何在一定的情況下在python終止進程
- 15. 如何在沒有終止應用程序的情況下關閉vb.net 2010中的主窗體
- 16. 在不關閉服務的情況下停止子進程
- 17. 如何關閉GLUT窗口而不終止應用程序?
- 18. 如何在不強制Java的情況下終止Java進程?
- 19. 如何防止關閉終端後關閉Spring MVC應用程序?
- 20. 如何在不關閉tkinter的情況下關閉pygames?
- 21. 如何在不使用sudo的情況下從終端窗口關閉我的互聯網連接?
- 22. WPF:在沒有「程序員」干預的情況下關閉應用程序關閉時的輔助窗口
- 23. 程序在不識別scanf的情況下終止
- 24. 如何在沒有強制關閉應用的情況下終止Android中的守護進程線程?
- 25. 當主終端關閉時程序終止
- 26. .NET程序在什麼情況下會終止?
- 27. Swing:如何在主窗口關閉時終止工作線程?
- 28. 在不阻止網絡應用程序的情況下監聽com端口
- 29. 在不關閉的情況下更新應用程序
- 30. 如何在不打開終端的情況下運行Tkinter程序