如何通过UdpClient从特定远程客户端接收UDP数据包?(.Net 4.6)

3
我正在尝试弄清楚服务器如何区分通过TCP监听器连接到它的多个客户端,并开始向UdpClient发送UDP消息。
对于TCP,TcpListner很容易处理,因为返回了TcpClient,我可以将其附加到服务器上特定的客户端实例。但现在我该如何处理UdpClient呢?毕竟UDP是一种无连接协议。我还好奇TcpClient如何知道首先要将数据发送回哪台机器,特别是如果它坐落在路由器后面。
我不能信任像UDP数据包头中的唯一ID这样的东西,因为这些东西总是可能被伪造或窃取。
1个回答

0

来自UdpClient.Receive Method (IPEndPoint):的文档:

remoteEP
类型:System.Net.IPEndPoint
一个表示发送数据的远程主机的 IPEndPoint。

换句话说,只需使用 Receive() 方法返回给您的 IPEndPoint 值。这将是每个客户端的唯一 IP 地址和端口,您可以将其用作匹配数据报与客户端状态的键。

我也很好奇 TcpClient 首先如何知道要将数据发送回哪台机器,特别是如果它坐落在路由器后面

连接的套接字维护有关远程端点的信息。如果客户端位于 NAT 路由器后面,则远程端点 IP 地址和端口属于路由器,并且路由器具有将外部可见地址和端口映射到位于该路由器后面的客户端的表。请参阅网络地址转换


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接