java - 有没有办法在给定端口号的情况下获取java中套接字连接的状态

标签 java sockets

我的服务器进程中的另一个线程监听我的主线程知道数量的特定端口。主线程无法访问其他线程打开的实际 Socket 对象,它只知道它要监听的本地端口号。

有没有办法找出这个套接字的状态?我真的只关心它是在听还是在连接/建立。但是可以访问此处列出的所有州:https://github.com/mss/java-netstat/blob/master/src/main/java/de/msquadrat/netstat/ConnectionState.java会很好。

现在您可能会问为什么我不直接使用该项目,因为它似乎完全符合我的要求。嗯,它只适用于 linux(或公开相同 /proc/net 文件系统的系统)。我需要跨平台的东西。

编辑:回应下面的一些评论。我无权访问正在监听或连接的线程中的任何对象。我无权访问该代码,因此我无法自己保留连接状态的全局表。是的,连接将处于 LISTEN 或 ESTABLISHED 状态。一次只能有一个连接的客户端,当该客户端连接时,服务器代码将不会仍在该端口上监听。这是未连接客户端时 netstat 的输出:

$ netstat -nap | fgrep 10010
tcp        0      0 0.0.0.0:10010               0.0.0.0:*                   LISTEN      20096/java

和客户端连接时相同的输出:

$ netstat -nap | fgrep 10010
tcp        0      0 192.168.101.94:10010        10.0.42.252:50426           ESTABLISHED 20096/java

为了完整起见,这里有一个更传统的 TCP 服务器在监听时的示例:

$ netstat -nap | fgrep 8080
tcp        0      0 127.0.0.1:8080              0.0.0.0:*                   LISTEN      20096/java

同一台服务器与一个连接的客户端:

$ netstat -nap | fgrep 8080
tcp        0      0 127.0.0.1:8080              0.0.0.0:*                   LISTEN      20096/java          
tcp        0      0 127.0.0.1:8080              10.0.42.252:60660             ESTABLISHED 20096/java

如您所见,此服务器执行大多数服务器执行的操作,它在接受连接后继续监听。因此,在那种情况下,单个本地端口上将有两个套接字,一个在 LISTEN 中,一个在 ESTABLISHED 中。但这显然不是我的情况。

最佳答案

答案是否定的。如果您无权访问 SocketServerSocket 对象,则没有平台独立的方法来查询 java 中套接字的连接状态。

关于java - 有没有办法在给定端口号的情况下获取java中套接字连接的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37597079/

相关文章:

java - 尝试使用 Fitnesse 和 DbFit 以及 SQL Server 时出现 SQLServerException

java - 哈希表 ||哈希码查找如何保持不变

linux - 是否可以在套接字上取消监听?

c# - 套接字连接错误

java - 无法在 Cygwin 下运行 Mahout 20newsgroups 示例

java - 从另一个类 JFrame 调用重绘

java - 了解奇怪的 Java 哈希函数

php - PHP Curl,错误: Browser must support session cookies?

java - 如何在远程服务器上启动 java socket-server

java - java服务器和matlab客户端之间的通信