DatagramSocket在发送到多播组时抛出异常

时间:2014-05-29 13:31:58

标签: c# windows-runtime multicast datagram

我尝试将一些数据发送到多播组。这工作了一段时间,但现在我得到了一个例外。 Exception表示主机名无法解析(HRESULT:0x80072AF9)。

他试图解析的主机名是ip地址(224.5.6.7)。此异常不会发生在我的Surface RT上,而是发生在Surface Pro上。

使用此示例,我可能会产生错误:

    private async void Test()
    {

        try
        {
            var socket = new Windows.Networking.Sockets.DatagramSocket();
            var localAdress = CurrentIPAddress();
            var port = "40404";
            const string M_GROUP = "224.5.6.7";

            socket.MessageReceived += (sender, ev) => {
                System.Diagnostics.Debugger.Break();

            };

            await socket.BindEndpointAsync(new HostName(localAdress), port);
            socket.JoinMulticastGroup(new HostName(M_GROUP));


            //HRESULT: 0x80072AF9
            var stream = await socket.GetOutputStreamAsync(
                                         new HostName(M_GROUP),
                                         port);
            await stream.WriteAsync(new byte[] { 3 }.AsBuffer());

        }
        catch (Exception e)
        {
            System.Diagnostics.Debugger.Break();
            throw;
        }
    }

    private string CurrentIPAddress()
    {
        var icp = NetworkInformation.GetInternetConnectionProfile();

        if (icp != null && icp.NetworkAdapter != null)
        {
            var hostname =
                NetworkInformation.GetHostNames()
                    .SingleOrDefault(
                        hn =>
                        hn.IPInformation != null && hn.IPInformation.NetworkAdapter != null
                        && hn.IPInformation.NetworkAdapter.NetworkAdapterId
                        == icp.NetworkAdapter.NetworkAdapterId);

            if (hostname != null)
            {
                // the ip address
                return hostname.CanonicalName;
            }
        }

        return string.Empty;
    }

在调用GetOutputStreamAsync时发生异常。

在两个系统中,套接字都绑定到ipv4地址 这两个系统都是最新的。 (2014年5月29日)