TcpListener:如何在所有接口上监听特定端口?

12

构造一个TcpListener有三种重载方式:

我想在特定端口上侦听,但需要使用所有可用接口。以前有一种重载可以实现这个目的,但它现在已被标记为obsolete

在.NET中,如何以新的首选/非过时的方式使用TcpListener在所有接口上侦听特定端口?


为了帮助理解,IPEndPoint是:

public IPEndPoint(
    IPAddress address,
    int port
)
这就是第三个重载的内容。而IPAddress的构造函数接受以下参数:
  • 一个byte[]
  • 一个Int64
  • 一个byte[]和一个Int64
1个回答

25

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

这个 SO post 建议您显式地绑定到每个 IP 地址 - 这个 SO post 有关于如何获取所有 IP 地址的代码...


来自MSDN

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


来自MSDN:

IPAddress.Any字段

提供一个IP地址,表示服务器应该监听所有网络接口上的客户端活动。


2
耶稣啊,这比我想象的更糟。你必须枚举所有接口,并手动指定要绑定到它们所有接口。 - Ian Boyd
在Linux上使用Mono,只需要绑定到Any就足够了,因为它实际上是"0.0.0.0",表示"所有接口"。 - Yahia
3
这句话的意思是“总之,它指的是所有IPv4接口”。 - Remy Lebeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接