我们有一个软件应用程序,它具有客户端 - 服务器架构,并且只能在LAN上使用。因此,我们打算使用Java Socket Programming来实现这一点(基于明确定义的协议)。
我们有两种设置:服务器设置(设置服务器作为后台进程侦听请求的端口)和客户端设置。这两者都可以由用户手动调用,具体取决于他希望软件在该特定计算机上的行为。
现在,对于Server应用程序,在设置过程中,我们会指定某些详细信息,例如端口号等。因此,我们现在要做的是确保一旦在该机器上修复了端口号,只要存在软件应用程序(以及服务器停机或正常运行时间的IRRESPECTIVE),我们就要确保没有其他第三方应用程序/产品使用该端口。
目前,有没有办法通过代码(Java)来做到这一点?假设此应用程序不必总是以管理员身份运行,因此可能没有访问Windows注册表的权限。
我希望我对问题陈述一直很清楚。当然,如果需要任何澄清,请询问,我会尝试进一步解释。
期待有关解决这个问题的建议。
答案 0 :(得分:5)
你根本不能......
当您的程序关闭时,任何其他程序都可以打开您的端口,并阻止您的程序在启动后使用它...
答案 1 :(得分:1)
解决此问题的一种方法是使用服务发现。有很多方法可以实现这一点。
它们的共同点是能够通过名称或ID查找服务并连接到它,无论实际使用的端口如何。每次运行时都可能不同。这样,您的应用程序可以使用任何空闲端口,而不需要保留端口(甚至只能在一个主机上运行)
答案 2 :(得分:-1)
你可以试试https://github.com/ProfessorEugene/PortReserve(java 1.6+) - 完全披露,我是作者。