Java 当多个进程侦听端口时,为什么tomcat会接收请求?

Java 当多个进程侦听端口时,为什么tomcat会接收请求?,java,apache,sockets,tomcat,tomcat7,Java,Apache,Sockets,Tomcat,Tomcat7,我最近在windows上发现了关于SO\u REUSEADDR;那只雄猫用这个 我做了一个小测试,以了解当另一个进程也在侦听同一端口时会发生什么。我的另一个过程是netcat。结果令人惊讶: 无论我是先启动nc(netcat)还是tomcat,如果来自tomcat 如果我用它的bin/tomcat.bat停止tomcat,它也会终止nc进程 如果我通过终止进程来停止tomcat,那么nc能够响应下一个连接 这有什么魔力?tomcat如何总能抓取传入的请求?这是(tomcat将服务于所有连接,

我最近在windows上发现了关于
SO\u REUSEADDR
;那只雄猫用这个

我做了一个小测试,以了解当另一个进程也在侦听同一端口时会发生什么。我的另一个过程是
netcat
。结果令人惊讶:

  • 无论我是先启动
    nc
    netcat
    )还是
    tomcat
    ,如果来自tomcat
  • 如果我用它的
    bin/tomcat.bat停止tomcat,它也会终止
    nc
    进程
  • 如果我通过终止进程来停止tomcat,那么nc能够响应下一个连接

这有什么魔力?tomcat如何总能抓取传入的请求?这是(tomcat将服务于所有连接,即使其他进程正在侦听)保证的行为吗?我无法想象如何保证,但我想问一下。

我能够从用户nos回答我问题时提出的问题中回答这个问题

我意识到,因为我使用的是
wgethttp://localhost:8080
在我的测试中,它使用的是只有tomcat在监听的IPv6


当我把它改成
http://127.0.0.1:8080
我看到了完全不同的行为

这是Windows在允许进程共享TCP端口时所做的一切的神奇之处。我在MSDN中的任何地方都找不到确切定义的语义,只能找到可能的语句。我也没有意识到它的目的。@EJP我喜欢它的目的。这就是SO_REUSEADDR的目的。它的目的不是允许多个进程在Windows上共享同一端口。Unix等。不允许这样做。我想不起来了。@EJP你是说?你读过文档了吗?