TcpListener:如何监听所有接口上的特定端口?
Posted
技术标签:
【中文标题】TcpListener:如何监听所有接口上的特定端口?【英文标题】:TcpListener: How to listen on specific port on all interfaces? 【发布时间】:2011-11-06 11:24:57 【问题描述】:构造TcpListener
有三个重载:
public TcpListener(int port);
(已过时)
public TcpListener(IPEndPoint localEP)
public TcpListener(IPAddress localaddr, int port)
我想要监听特定端口,但监听所有可用接口。 有一个重载可用于执行此操作,但它已被标记为 obsolete
。
在 .NET 中使用TcpListener
在所有接口上侦听特定端口的新首选/非过时方法是什么?
为了帮助起见,IPEndPoint
是:
public IPEndPoint(
IPAddress address,
int port
)
这就是第三个重载。而IPAddress
将其作为其构造函数:
byte[]
Int64
byte[]
和 Int64
【问题讨论】:
【参考方案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 接口”。以上是关于TcpListener:如何监听所有接口上的特定端口?的主要内容,如果未能解决你的问题,请参考以下文章