c# - UDP 客户端接收仅在使用本地发送方时工作
问题描述
我用来从 Forza 中获取 UDP 数据报,这是一款使用内置数据输出功能UdpClient
的赛车游戏。我已将 Forza 上的数据输出目标端点设置为 127.0.0.1:5300
我可以验证这些是否正在发送,并且实际上可以被我的应用程序接收。
问题是它们只有在添加内部心跳后才会收到。
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 程序正在检测有无线路的数据包。
这有什么原因吗?
解决方案
推荐阅读
- java - QueryDSL @OneToOne Join-FetchMode 与 Hibernate
- sql - 按生日 sql 排序
- c# - Why are my hidden input not being passed in the model class?
- python - How to extract JSON content with requests from an API?
- angularjs - 是否可以通过 Service Worker 更改 $rootScope 变量?
- tfs - How can we make a Work Item Creator automatically a Follower?
- r - 使用 team_drive_get 访问团队驱动器上的文件
- java - 为什么它在尝试解压缩 1.12 版本时会抛出错误?
- json - 我可以提取第二级花括号内的所有键值,而忽略第一级花括号中的值吗
- python-3.x - Trying to use a function that returns three values as the input for a function that takes 3 values