我在我的一个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程序