sar*_*rat 3 c# networking network-programming
我尝试了以下代码,使我的代码在双栈模式下工作.不幸的是,它没有在双堆栈模式下打开端口.
var listener = new TcpListener(IPAddress.Any, 2222);
listener.Server.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, 0);
listener.Start();
Run Code Online (Sandbox Code Playgroud)
后来我意识到改变var listener = new TcpListener(IPAddress.IPv6Any, 2222);它会让它对我有用.究竟有什么区别
IPAddress.Any和IPAddress.IPv6Any田地?
IPAddress.Any适用于所有IPv4接口,IPAddress.IPv6Any适用于所有IPv6接口.
IPAddress.Any是0.0.0.0,IPAddress.IPv6Any是::
如果您不使用IPv6Any,SocketOptionName.IPv6Only则可以在同一套接字上接受IPv4和IPv6连接.
要同时侦听IPv4和IPv6堆栈,请使用以下代码:
var listener = new TcpListener(IPAddress.IPv6Any, 2222);
listener.Server.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, false);
Run Code Online (Sandbox Code Playgroud)
IPv6Any告诉Windows监听IPv6堆栈.将socket选项设置为false会告诉Windows不要将自己限制为IPv6堆栈,而是要监听IPv4堆栈.默认是仅侦听显式指定的堆栈.