【问题标题】:C# Socket listener does not bind to portC# Socket 监听器不绑定到端口
【发布时间】:2019-01-01 05:05: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);

我的问题是:

  1. 如何找到监听端口的进程? Currports 没有显示,resmon 也没有显示。
  2. 为什么 node.js 监听端口并获取消息?有什么不同?
  3. 我想我有一个隐藏的线程,但我没有找到它。我使用 ProcessExplorer。

更新:

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

【问题讨论】:

  • 这可能会有所帮助stackoverflow.com/questions/41836209/…这个问题已经被问过很多次了,查看这个论坛上的其他解决方案
  • 我尝试了该帖子中的所有可能性。但还是一样。 netstat -a 没有显示我的端口。所以第一个解决方案不起作用。第二个是不可能的,因为我添加了整个代码。只有4行。而且没有多线程,没有递归调用,实际上没有真正的监听。我只想绑定那个端口。
  • 你能绑定到其他随机端口吗?即使您看不到任何正在侦听 7001 的内容,传出 TCP 连接仍然可能使用 7001 作为源端口。检查该端口的完整 netstat 输出。
  • 我试试7002,绑定就ok了。 netstat -o -n -a | findstr 7001 没有显示结果。

标签: c# sockets tcplistener


【解决方案1】:

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

来源:https://stackoverflow.com/a/54727281/32083。 更多背景在这里https://github.com/docker/for-win/issues/3171

【讨论】:

    【解决方案2】:

    我相信您与该端口的连接尚未完全关闭。这可以防止端口再次打开。要解决这个问题,您必须在绑定端口之前设置套接字选项 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);
    

    【讨论】:

    • 我在 3 年前解决了这个问题,但我忘记在这里写了。你的答案是正确的。 SocketOption 是修复问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 2011-01-13
    • 1970-01-01
    • 2021-07-15
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多