如何在.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来监听所有的网络适配器吗?

如何在.net Core中替换System.Net.IPAddress.Any并监听所有网络适配器?

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);
    }
}