2009-11-19 83 views
0

有没有简单的方法来确保本地端口尚未打开。一些TCP套接字服务器(例如Grizzly)似乎没有默认进行这种检查。如果缺少此检查,服务器似乎会启动并作出响应,但客户端代码仅连接到未关闭的旧服务器。这可能非常糟糕!检查本地TCP端口未在Java中打开

是否有一段简单的Java代码行可以检查以确保端口尚未被其他进程使用?

回答

3

我看到两个明显的方式来做到这一点:

  1. 尝试连接到本地主机上的端口,如果你被接受,正在使用的端口
  2. 尝试在监听模式打开一个ServerSocket在那个港口。如果你得到“已经绑定”的例外,那么该端口正在使用

希望它有帮助。

+0

这两者之间,可能更好地尝试连接 - 打开一个端口更有可能弹出一个用户的防火墙,警告有关“应用程序XYZ试图监听端口1234 ...” – 2009-11-19 17:59:07

+0

ServerSocket解决方案是相当光滑。防火墙弹出窗口很好,因为程序将在该端口上提供服务。谢谢你的帮助。 – User1 2009-11-19 18:06:36

+0

请注意:如果您尝试连接到某个端口并失败,可能是因为您连接到该端口时被防火墙挡住了。仅仅因为你不能连接并不意味着它没有被使用。 – 2009-11-19 18:19:36