Java - 检查端口是否正在使用而不连接它

apo*_*low 2 java java-native-interface multithreading

我的情况:

我有两个线程同时运行,一个线程想要等到另一个线程正在使用一个端口,它将在到达使用端口的点之前运行一定数量的步骤.

我必须承诺的另一个限制是,在线程打开端口之前经过这些步骤的线程与其他线程没有简单的通信,因为它是在使用API​​的JNI本机c代码中(希望不适用于该问题,通过一个大方法运行)

题:

有没有办法让java能够等到端口正在使用?我看过stackoverflow的解决方案,但它们有一些问题:

  1. 创建新套接字将导致端口正在使用,我的其他线程将无法访问此套接字.
  2. 使用netstat解析器可以从项目中删除可移植性.

如果我忽略了stackoverflow的答案请骂我无法搜索或什么,任何事情都会有所帮助.

Ste*_*n C 5

有没有办法让java能够等到端口正在使用?

不是纯Java.

但假设两个线程在同一个JVM中运行,它们可以通过其他方式进行通信.所以你可以使用共享标志(例如,一个易失性布尔变量或一个AtomicBoolean)或一个CountDownLatch或一个Semaphore.您可以使用其中任何一个实现一个简单的操作,其中一个线程(实际上)告诉另一个线程它正在使用该端口.

(事实上​​,如果你想让一个线程等待另一个线程,那么一个锁存器是最好的选择.)


这不是JNI中容易做到的事情.AFAIK,该netstat程序不使用普通的系统调用来执行此操作.我认为它使用"/ proc"树或(在旧实现中)直接访问内核内存以获取所需的信息.您可以在本机库中复制它,但我怀疑您会找到一个现有的库来执行此操作.当然,Windows实现将完全不同......