首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >侦听同一端口的2个进程- .NET未抛出异常

侦听同一端口的2个进程- .NET未抛出异常
EN

Stack Overflow用户
提问于 2012-11-13 18:36:39
回答 4查看 2.2K关注 0票数 18

下图显示了2个进程,它们尝试并成功地将侦听套接字(服务器)绑定到我的本地计算机上的端口10000:

以下是netstat的输出(用于确认):

代码语言:javascript
复制
netstat -a -n | find "10000"
  TCP    0.0.0.0:10000          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:10000          0.0.0.0:0              LISTENING
  TCP    [::]:10000             [::]:0                 LISTENING

(注意:在10000上,javaw.exe进程是第一个打开侦听套接字的进程)。

虽然我知道在某些情况下,多个进程确实可以侦听同一端口(SO_REUSEADDR),但在我的特定场景中,有一些事情会让我感到困扰:

  1. 在我的应用程序中,我特别对.NET说,我需要一个独占的侦听套接字(SO_EXCLUSIVEADDRUSE),通过

TcpListener= new listener (adr,ipport);listener.ExclusiveAddressUse = true;

  • .NET不抛出任何类型的异常/错误/端口已在使用的通知。事实上,它实际上认为一切都很顺利。

  • 我的服务器应用程序从此不会从listener.AcceptTcpClient()调用中唤醒。本应与服务器通信的客户端应用程序收到一个有效的连接,但无法与“我的”服务器通信(假设是因为它建立了到“其他”进程的连接,而“其他”进程不会说它的“协议”)。

如果有人想要重现我的发现:第二个过程是Eclipse (PHP)的"Helios“版本。但具体的进程在这里应该不重要:如果一个进程可以在操作系统下做奇怪的事情,那么其他进程也可以。

关于如何获得错误或完全防止这种情况(通过附加参数),有什么建议吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-18 11:06:30

您在评论中发布的MSDN link似乎回答了您的问题。

它与绑定到通配符IP端点(0.0.0.0 ip4;ip6的::IPEndpoint.ANY)的java应用程序有关。我假设上面代码片段中的adr变量是一个特定的IP地址,而不是通配符地址。

看一看那篇文章中的表格。它列出了使用套接字选项的不同组合第二次尝试绑定到特定端点或通配符端点的结果。

简而言之,在没有SO_EXCLUSIVEADDRUSE套接字选项的情况下,Java代码绑定在通配符0.0.0.0端点上。该矩阵显示,当发生这种情况时,您可以成功绑定到特定于地址,并通过请求独占地址使用。

如果您尝试使用通配符进行绑定,则该表显示调用将失败。

票数 4
EN

Stack Overflow用户

发布于 2013-01-08 10:20:58

不确定为什么它没有抛出异常。但是,文档中说TcpListener的构造函数并不真正验证端口是否打开,所以它只在端口号无效时抛出ArgumentException。其他方法,如Start,会在端口已经被另一个进程打开时抛出SocketException,并将ErrorCode设置为WSAEADDRINUSE (10048) (参见Start methodSocket Error Codes)。

要防止出现这种情况,可以调用Start并捕获SocketException,或者使用名称空间System.Net.NetworkInformation来查询所有使用的端口,并确定某个特定端口是否可用,如下所示:In C#, how to check if a TCP port is available?

票数 1
EN

Stack Overflow用户

发布于 2012-11-15 00:47:46

我相信你需要真正启用TCP端口共享--我现在正在打电话,所以目前我能做的最好的事情就是丢弃一个链接:Net.TCP Port Sharing

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13359204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档