java - 如何在没有Java中的java.net.BindException的情况下监听本地主机中的两个端口?

标签 java multithreading serversocket

我编写了一个程序,使两个线程都包含 ServerSocket 对象,监听两个不同的端口并在 while 循环中等待 accept(),运行该程序后,启动其中一个线程不会导致 Exception,但是当它启动另一个线程时,我得到 java.net.BindException 如下:

java.net.BindException: Address already in use: JVM_Bind
    at java.net.DualStackPlainSocketImpl.bind0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
    at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
    at java.net.PlainSocketImpl.bind(Unknown Source)
    at java.net.ServerSocket.bind(Unknown Source)
    at java.net.ServerSocket.<init>(Unknown Source)
    at java.net.ServerSocket.<init>(Unknown Source)
    at ListeningThread.run(ListeningThread.java:18)

我多次使用不同的端口,但没有成功,请帮我解决这个问题。感谢您的帮助。

最佳答案

I used different ports for both many times, but didn't work, please help me fix this problem.

如果最近使用过该端口,则无法设置 SO_REUSEADDR(使用 socket.setReuseAddress(true))可能会导致绑定(bind)失败,即使当前没有进程正在使用它。

另一种可能性是代码中的逻辑错误导致它为两个线程使用相同的端口。在这种情况下,您应该添加一条打印要绑定(bind)的端口的跟踪。

关于java - 如何在没有Java中的java.net.BindException的情况下监听本地主机中的两个端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30417401/

相关文章:

java - 通过 cli 编译并创建可运行的 jar 文件,如 eclipse

java - "unlimited"系统下打开文件过多异常

java - RxJava 谓词过滤器

c# - 如何保证多线程写入文件时出现异常?

java - 为什么这个套接字为空?

java - 将字符串和文件发送到 InputStream

java - 再次重新使用 java 套接字客户端

python - 规则定义中 "threads"通配符的算术运算

java - 定时器类中潜在的竞争条件?

java - Java 中的客户端服务器程序(没有正确的输出)[没有错误]