C# windows 10中的UDP存在问题。超宽带

C# windows 10中的UDP存在问题。超宽带,c#,udp,win-universal-app,datagram,C#,Udp,Win Universal App,Datagram,我有以下问题: 我用UDP在本地网络中与两台不同的机器通信 在一边,我有一台安装了4.5框架的Windows7机器。我使用的是班级系统.Net 使用此代码: public static void UDPWriter() { Task.Run(async () => { byte[] data = new byte[10000]; IPEndPoint ipep = new IPEndPoint

我有以下问题: 我用UDP在本地网络中与两台不同的机器通信

在一边,我有一台安装了4.5框架的Windows7机器。我使用的是班级系统.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);

            }

        });

    }
   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

        }
另一方面,我正在使用Windows 10通用应用程序,代码如下:

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

            }

        });

    }
   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(可能我用错了),但它似乎不起作用。 更新1: 在wireshark中,我收到了这条消息
超过生存时间(超过碎片重组时间)仅Wireshark中的一些包成功重组,其他包成功重组(几乎全部)

本地机器IPC使用UWP上的环回受到限制。我最近也遇到了这个问题。也许考虑一种不同的方法,比如app到app的通信——

从DatagramSocket示例中:

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


(朝向底部)

您正在侦听器上设置DontFragment属性,这意味着它将拒绝接收到的任何碎片数据包。如果在侦听器上将此设置为false,是否有效?否。我已经尝试了Datagramsocket.control中的所有参数。我已经做了所有可能的组合,在听者和发送者。今天我将尝试使用另一个路由器,看看它的硬件问题是否导致校验和错误或类似的问题。超过生存时间(超过碎片重组时间)我在wiresharkYou中收到此消息,你只监听多播数据包吗<代码>listener.Control.multicastly=truehi@John,如果你想继续,这就是问题所在:刚刚遇到这个-Windows环回豁免管理器我在两台不同的机器上运行了它。问题是,当您只有一个数据包时,运行正常,其中一个数据包碎片化(由于其侧面),它不会收到任何东西注意,环回异常仅适用于客户端套接字,而不适用于服务器(侦听)onesso,您如何测试您的应用程序?你需要两台电脑吗?我有点困惑。。