首页 > 解决方案 > UDP 客户端接收仅在使用本地发送方时工作

问题描述

我用来从 Forza 中获取 UDP 数据报,这是一款使用内置数据输出功能UdpClient的赛车游戏。我已将 Forza 上的数据输出目标端点设置为 127.0.0.1:5300 正在发送的 udp 数据包

我可以验证这些是否正在发送,并且实际上可以被我的应用程序接收。

收到的数据包

问题是它们只有在添加内部心跳后才会收到。

       public const int FORZA_DATA_OUT_PORT = 5300;
       public const int FORZA_HOST_PORT = 5200;

       private static void Main(string[] args)
       {
           var ipEndPoint = new IPEndPoint(IPAddress.Loopback, FORZA_DATA_OUT_PORT);            
           var senderClient = new UdpClient(FORZA_HOST_PORT);

           // Heartbeat task - remove this and nothing is received
           var senderTask = Task.Run(async () =>
           {
               while (true)
               {
                   Console.WriteLine("Sending heartbeat");
                   await senderClient.SendAsync(new byte[1], 1, ipEndPoint);
                   await Task.Delay(5000);

               }
           });

           int count = 0;
           var receiverTask = Task.Run(async () =>
           {
               Console.WriteLine("Packet Forwarding UP!");
               var client = new UdpClient(FORZA_DATA_OUT_PORT);
               Console.WriteLine("Listening... ");
               while (true)
               {
                   var receive = await client.ReceiveAsync();
                   count++;
                   Console.WriteLine($"{count:D5} - {receive.Buffer.Length}B - {receive.RemoteEndPoint.Address} - {receive.RemoteEndPoint.AddressFamily} - {receive.RemoteEndPoint.Port}");
               }
           });

          Task.WaitAll(senderTask, receiverTask);
       }

如果我删除,senderClient.SendAsync则不会收到任何数据包。LiveTcpUdpWatch 程序正在检测有无线路的数据包。

这有什么原因吗?

标签: c#networkingudpudpclient

解决方案


推荐阅读