如何在.net Core中替换System.Net.IPAddress.Any并监听所有网络适配器?
本文关键字:监听 Any 网络适配器 IPAddress Net net Core System 替换 | 更新日期: 2023-09-27 18:08:20
我正试图从。net框架移植一个vb.net项目到。net核心和新的Windows通用平台应用程序。
在网络代码中使用。ipaddress。为了能够监听所有网络适配器,Any是频繁的。有人知道在。net核心的一种方式,我可以使用DatagramSockets来监听所有的网络适配器吗?
IPAddress.Any
等价于IPAddress ip = IPAddress.Parse("0.0.0.0")
使用Windows. networking . sockets . datagramsocket (Windows 8+)
private void Foo()
{
datagramSocket = new DatagramSocket();
datagramSocket.MessageReceived += OnMessageReceived;
await datagramSocket.BindServiceNameAsync("8081");
}
private void OnMessageReceived(
DatagramSocket sender,
DatagramSocketMessageReceivedEventArgs args)
{
// ...
}
使用system.net.socket.socket (.). NET Core和UWP)
private void Foo()
{
Socket udpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 8081);
udpSocket.Bind(remoteEndPoint);
SocketAsyncEventArgs e = new SocketAsyncEventArgs();
byte[] buffer = new byte[1024];
e.SetBuffer(buffer, 0, buffer.Length);
e.RemoteEndPoint = remoteEndPoint;
e.Completed += ReceiveFromCallback;
if (!udpSocket.ReceiveFromAsync(e))
{
ReceiveFromCallback(udpSocket, e);
}
}
private void ReceiveFromCallback(object sender, SocketAsyncEventArgs e)
{
if (e.SocketError != SocketError.Success)
{
Debug.WriteLine(e.SocketError);
return;
}
Socket udpSocket = sender as Socket;
byte[] buffer = e.Buffer;
Debug.WriteLine(Encoding.UTF8.GetString(buffer, 0, e.BytesTransferred));
if (!udpSocket.ReceiveFromAsync(e))
{
ReceiveFromCallback(udpSocket, e);
}
}