Windows 10中的UDP问题.UWP

时间:2016-04-25 05:49:05

标签: c# udp win-universal-app datagram

我遇到以下问题: 我正在使用UDP在本地网络中通信两台不同的计算机。

在一方面,我有一台安装了4.5框架的Windows 7机器。我正在使用System.Net类 使用此代码:

 public static void UDPWriter()

    {

        Task.Run(async () =>

        { 
            byte[] data = new byte[10000];
            IPEndPoint ipep = new IPEndPoint(IPAddress.Pars("192.168.0.16"), 5002);

            Socket udpClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);


            udpClient.Connect(ipep);

            while (true)

            {
                await Task.Delay(24);
                string input = packagetosend;
                data = Encoding.ASCII.GetBytes(input);
                var receivedResults = udpClient.Send(data, SocketFlags.None);

            }

        });

    }

另一方面,我使用的是使用此代码的Windows 10 Universal App:

   async static private void EnablerListener()
        {
            //Click

            HostName hostname = new HostName("192.168.0.16");
            listener = new DatagramSocket();
            listener.Control.InboundBufferSizeInBytes=10000;


            listener.MessageReceived += socket_MessageReceived;


            await listener.BindServiceNameAsync("5002");

        }

       static void socket_MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
        {

            // Message received. Place your logic here

        }

当我发送一个“小”包(我的理论是小于MTU)时,我会正确收到发送的内容。

问题来自于我的udp包是碎片化的。当我发送1个分为4个的软件包时(我在Wireshark中看到过),Windows 10软件没有收到任何内容。我试过更改listener.Control.Donotfragment(也许我使用它错了)但它似乎无法正常工作。 UPDATE1: 在wireshark中,我收到此消息 超出生存时间(超出片段重组时间)只有Wireshark中的一些软件包,其他软件包成功重组(几乎全部)

1 个答案:

答案 0 :(得分:3)

在UWP上使用环回的本地机器IPC受到限制。我最近自己遇到了这个问题。也许考虑一种不同的方法,如App-to-App Communication - https://channel9.msdn.com/Events/Build/2015/3-765

来自DatagramSocket示例:

  

注意使用IP环回地址的网络通信不能   通常用于Universal之间的进程间通信   Windows平台(UWP)应用程序和不同的进程(不同的UWP   应用程序或桌面应用程序)因为这受到网络隔离的限制。   允许使用IP环回地址的网络通信   UWP应用程序中用于通信目的的相同过程。更多   信息,请参阅如何设置网络功能。

https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/DatagramSocket(在底部)