所以我们有一个服务器,它有多个应用程序使用多个端口。 5729、7614、9231为例。
客户端需要连接到这些端口之一。所有端口都处于 Activity 状态并等待服务器上的连接,但客户端需要连接的服务器应用程序仅在端口 7614 上。其他两个端口用于不同的应用程序。
一旦连接到 Activity 端口,客户端就可以在该端口对服务器执行 ping 操作,并找出它使用的是什么应用程序(这已经在知道服务器协议(protocol)的情况下实现并且工作正常)。
问题是,客户端无法知道正确的端口是哪个端口,直到它找到并 ping 它。服务器应用程序使用的端口不是静态的,可能随时更改(不是我们的代码,因此无法固定为静态)。
目前,由于我们不知道哪个端口将包含正确的端口号,我们必须从 0 到 65525 递增每个端口,尝试连接,并对连接的端口执行 ping 操作以确定我们是否连接到正确的应用。
这需要很长时间。有没有办法获得正在使用的 3 个端口的列表?也就是说,服务器应用程序在任何端口上调用了新的 ServerSocket(端口号)?
这必须在 java 中完成。
编辑 客户端需要能够看到服务器当前使用的端口。这个问题中的所有内容都必须在客户端完成。在服务器上使用文件或运行命令不是一种选择。
最佳答案
选项:
- 更改您的设计并使用固定端口号。扫描永远行不通。你可以连接到任何东西。
- 使用诸如 LDAP 之类的命名服务,并让每个服务以其实际端口号将自身绑定(bind)到 LDAP 中,并使用客户端知道的名称;让客户端查找该名称并使用该端口号。我不推荐这样做。
- 编写您自己的注册表服务,以完成与 (2) 大致相同的工作,但不必费力处理 LDAP API:只需让每个服务将其名称和端口号发送到注册表,并让客户端询问 regs urge按名称为每个端口号。同样,这不是为了克服糟糕的设计而编写的额外代码。
我强烈推荐 (1)。这是其他人所做的。
关于java - 在java中从客户端查找已使用的服务器端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32148322/