C# 套接字侦听器未绑定到端口

我尝试侦听服务器上的特定端口。我编写了一个简单的控制台应用程序,但出现错误:


通常每个套接字地址(协议/网络地址/端口)只允许使用一次。


但是,我没有找到任何侦听该端口的进程。资源管理器和 CurrPorts 不显示任何信息。


我的代码(所有代码):


var ipEndPoint = new IPEndPoint(IPAddress.Any, 7001);

var tcpListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

tcpListener.Bind(ipEndPoint);

tcpListener.Listen(100);

我的问题是:

  1. 如何找到哪个进程监听端口?Currports 不显示,也是 resmon。

  2. 为什么 node.js 监听端口并获取消息?有什么不同吗?

  3. 我想我有一个隐藏的线程,但我没有找到它。我使用 ProcessExplorer。

更新:

当我在服务器重置后运行我的控制台应用程序时,它工作正常。但是,当关闭并重新打开应用程序时,它无法正常工作并给出了上述例外情况。


至尊宝的传说
浏览 240回答 2
2回答

偶然的你

我在 mysql 端口 3306 上遇到了同样的问题。 tcpview 、 netstat -ano 和 currports 都没有显示任何内容。但netsh interface ipv4 show excludedportrange protocol=tcp显示端口被保留。似乎 hyper-v / docker 是罪魁祸首,修复方法是禁用 hyper-v ,保留端口netsh int ipv4 add excludedportrange protocol=tcp startport=<your port> numberofports=1并重新启用 hyper-v。

胡子哥哥

我相信您与该端口的连接并未完全关闭。这可以防止端口再次打开。要解决此问题,您必须在绑定端口之前设置套接字选项 ReuseAddress。&nbsp; &nbsp; var ipEndPoint = new IPEndPoint(IPAddress.Any, 7001);&nbsp; &nbsp; var tcpListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);&nbsp; &nbsp; tcpListener.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);&nbsp; &nbsp; tcpListener.Bind(ipEndPoint);&nbsp; &nbsp; tcpListener.Listen(100);
打开App,查看更多内容
随时随地看视频慕课网APP