java - 在java中从客户端查找已使用的服务器端口

标签 java linux sockets

所以我们有一个服务器,它有多个应用程序使用多个端口。 5729、7614、9231为例。

客户端需要连接到这些端口之一。所有端口都处于 Activity 状态并等待服务器上的连接,但客户端需要连接的服务器应用程序仅在端口 7614 上。其他两个端口用于不同的应用程序。

一旦连接到 Activity 端口,客户端就可以在该端口对服务器执行 ping 操作,并找出它使用的是什么应用程序(这已经在知道服务器协议(protocol)的情况下实现并且工作正常)。

问题是,客户端无法知道正确的端口是哪个端口,直到它找到并 ping 它。服务器应用程序使用的端口不是静态的,可能随时更改(不是我们的代码,因此无法固定为静态)。

目前,由于我们不知道哪个端口将包含正确的端口号,我们必须从 0 到 65525 递增每个端口,尝试连接,并对连接的端口执行 ping 操作以确定我们是否连接到正确的应用。

这需要很长时间。有没有办法获得正在使用的 3 个端口的列表?也就是说,服务器应用程序在任何端口上调用了新的 ServerSocket(端口号)?

这必须在 java 中完成。

编辑 客户端需要能够看到服务器当前使用的端口。这个问题中的所有内容都必须在客户端完成。在服务器上使用文件或运行命令不是一种选择。

最佳答案

选项:

  1. 更改您的设计并使用固定端口号。扫描永远行不通。你可以连接到任何东西。
  2. 使用诸如 LDAP 之类的命名服务,并让每个服务以其实际端口号将自身绑定(bind)到 LDAP 中,并使用客户端知道的名称;让客户端查找该名称并使用该端口号。我不推荐这样做。
  3. 编写您自己的注册表服务,以完成与 (2) 大致相同的工作,但不必费力处理 LDAP API:只需让每个服务将其名称和端口号发送到注册表,并让客户端询问 regs urge按名称为每个端口号。同样,这不是为了克服糟糕的设计而编写的额外代码。

我强烈推荐 (1)。这是其他人所做的。

关于java - 在java中从客户端查找已使用的服务器端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32148322/

相关文章:

linux - 在 Oracle linux 7 上安装 Oracle 11gR2 - OS 内核参数 “semmni” 的先决条件失败

c++ - 如何在 Linux 上使用 QProcessEnvironment 设置代理地址?

java - 向 Chrome 同步服务发送 HTTPS 请求 - 收到错误 404

python - 套接字队列(Twitter 流作为引用)

c# - 未从对服务器的 rcon 请求获得完整响应

java - 上次编译的警告 - 无法读取文本文件/查找目录

java - 从 Java 使用 groovy.util.AntBuilder

java - Firebird JDBC 更新监听器

java - 多个或批量获取或获取 HBase Java 客户端?

linux - 将 cat 输出保存到变量时删除所有换行符