c# - 响应 UDP 数据报:响应未到达发件人
问题描述
我正在努力实现 UDP 通信。我正在尝试创建两个 UdpClient 实例,它们交换一些信息。我目前处于一个阶段,client1(在端口 13006 上)向 client2(端口 13007)发送字节,client2 正确接收它们并发送回信息,但 client1 没有收到该响应。两个客户端都在同一台机器上工作(我正在测试集成测试,使用 XUnit)。
双方开始听下面的方式:
public override void SetupListener(int port)
{
udpClient = new UdpClient(port);
udpClient.BeginReceive(new AsyncCallback(HandleNewConnection), null);
}
然后client1向client2发送消息:
ConnectAsync(IPAddress.Loopback, client2.ListenerPort);
[...]
public override async Task ConnectAsync(IPAddress address, int port)
{
UdpClientSender = new UdpClient();
UdpClientSender.Connect(address, port);
_logger.LogInformation($"({CurrentConnectionId}) Sending ConnectionRequest to {address}:{port}");
var message = ProtocolHandler.InjectFrame((int)MessageType.ConnectionRequest, null);
UdpClientSender.Send(bytes, bytes.Length);
BeginReading();
}
并立即开始倾听:
public override void BeginReading()
{
Thread _thread = new Thread(() =>
{
UdpClientSender.BeginReceive(new AsyncCallback(HandleRead), null);
});
_thread.Start();
}
client2 正确接收消息并调用此函数:
protected override Task WriteToNetworkStream(byte[] bytes)
{
_logger.LogDebug($"({CurrentConnectionId}) Sending. LocalEndpoint: {UdpClientSender.Client.LocalEndPoint}");
_logger.LogDebug($"({CurrentConnectionId}) Sending. RemoteEndpoint: {UdpClientSender.Client.RemoteEndPoint}");
UdpClientSender.Send(bytes, bytes.Length);
return Task.CompletedTask;
}
但是响应消息没有到达client1。
我想问题在于端口翻译。client1 向端口 13007 发送消息(这是 client2 的正确端口,这就是它被正确发送的原因),但 client2 收到消息后发现它来自端口 59464 并在那里发送响应。不幸的是,我不确定如何解决这个问题。有什么建议么?
解决方案
推荐阅读
- android - Android 9 RTT 范围请求状态 1
- reactjs - 如何从日期选择器中保存日期值?
- arangodb - ArangoDB 图遍历不使用组合索引
- javascript - 尝试运行我的机器人命令时出现此错误
- android - 如何在 NativeScript 项目中从 JS 访问 Android 颜色资源?
- flutter - 颤动 - 画布drawImage返回空白
- django - 如何在 Django 数据迁移上下文中访问模型的自定义管理器?
- ios - 使用 Telr 进行支付集成
- google-cloud-storage - GCS 问题的数据流模板作业失败原因
- elixir - 将列表解析为地图