【问题标题】:TcpListener: How to listen on specific port on all interfaces?TcpListener:如何监听所有接口上的特定端口?
【发布时间】:2011-11-06 11:24:57
【问题描述】:

构造TcpListener有三个重载:

想要监听特定端口,但监听所有可用接口。 有一个重载可用于执行此操作,但它已被标记为 obsolete

在 .NET 中使用TcpListener 在所有接口上侦听特定端口的新首选/非过时方法是什么?


为了帮助起见,IPEndPoint 是:

public IPEndPoint(
    IPAddress address,
    int port
)

这就是第三个重载。而IPAddress 将其作为其构造函数:

  • byte[]
  • Int64
  • byte[]Int64

【问题讨论】:

    标签: .net sockets tcplistener socketserver


    【解决方案1】:

    只需绑定到IPAddress.Any - 这就是通常的做法...不确定,但可能您也需要绑定到IPAddress.IPv6Any

    SO post 建议您明确绑定到每个 IP 地址 - 而此 SO post 包含有关如何获取所有 IP 地址的代码...


    来自MSDN

    如果您不关心分配哪个本地地址,请为 localaddr 参数指定IPAddress.Any,底层服务提供商将分配最合适的网络地址。


    来自MSDN

    IPAddress.Any 字段

    提供一个 IP 地址,指示服务器应在 所有 网络接口上侦听客户端活动。

    【讨论】:

    • 耶稣;这比我想象的还要糟糕。您必须枚举所有接口,并手动说您要绑定到所有接口。
    • 在带有 Mono 的 linux 上,绑定到 Any 就足够了,因为那是“实际上是 0.0.0.0”,它的意思是“所有接口”...
    • 嗯,无论如何,它的意思是“所有 IPv4 接口”。
    猜你喜欢
    • 2012-10-28
    • 2015-11-28
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2017-03-21
    • 2018-03-18
    • 1970-01-01
    • 2013-12-17
    相关资源
    最近更新 更多