【发布时间】:2012-11-26 14:55:59
【问题描述】:
对我来说这看起来很奇怪。我可以在同一个端口上运行多个 TCP 服务器。
我使用带有以下代码的 Apache MINA 库:
IoAcceptor acceptor = new NioSocketAcceptor();
acceptor.bind(new InetSocketAddress(80));
端口 80 已被另一个程序使用。但我没有收到异常“地址已在使用中”。使用 netstat 我可以看到以下内容:
C:\>netstat -oan |find /i "LIST"
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 2220
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 904
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 840
有人可以解释一下这种行为吗?
操作系统:Windows 7。
谢谢。
【问题讨论】:
-
什么是进程2220和904?在您绑定之前,端口 80 是否已被使用?还是您的绑定导致它在关闭之前被两个进程共享?你打电话给
setReuseAddress吗? -
@trashgod 该链接中没有任何内容可以解释这种行为。这不应该发生。
-
2220 是 javaw(我的应用程序)。 904是skype(之前推出过)。我没有调用 setReuseAddress。
-
我认为不止一个应用可以监听传入连接,但是当最终有传入连接时,只有一个可以连接。
-
你找到了圣杯。我们最终可以运行 Web 服务器,而无需为每个证书或带有 SNI 的 TLS 1.2 提供单独的 IP……好吧,说实话,这个输出在我看来是非常错误的。不可能有两个进程在同一主机、端口和协议上侦听。
标签: java tcp apache-mina