为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
至尊宝的传说 2021-10-24 19:51:25
我尝试侦听服务器上的特定端口。我编写了一个简单的控制台应用程序,但出现错误:通常每个套接字地址(协议/网络地址/端口)只允许使用一次。但是,我没有找到任何侦听该端口的进程。资源管理器和 CurrPorts 不显示任何信息。我的代码(所有代码):var ipEndPoint = new IPEndPoint(IPAddress.Any, 7001);var tcpListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);tcpListener.Bind(ipEndPoint);tcpListener.Listen(100);我的问题是:如何找到哪个进程监听端口?Currports 不显示,也是 resmon。为什么 node.js 监听端口并获取消息?有什么不同吗?我想我有一个隐藏的线程,但我没有找到它。我使用 ProcessExplorer。更新:当我在服务器重置后运行我的控制台应用程序时,它工作正常。但是,当关闭并重新打开应用程序时,它无法正常工作并给出了上述例外情况。
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

我在 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。


查看完整回答
反对 回复 2021-10-24
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

我相信您与该端口的连接并未完全关闭。这可以防止端口再次打开。要解决此问题,您必须在绑定端口之前设置套接字选项 ReuseAddress。


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

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

    tcpListener.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);

    tcpListener.Bind(ipEndPoint);

    tcpListener.Listen(100);


查看完整回答
反对 回复 2021-10-24
  • 2 回答
  • 0 关注
  • 239 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信