如何从每个UdpClient接收来自特定远程客户端的UDP数据包? (.Net 4.6)

时间:2017-11-12 21:58:36

标签: c# .net udpclient

我试图弄清楚服务器如何区分通过TCP侦听器连接到它的多个客户端,并开始向UdpClient发送UDP消息。

TcpListner使TCP变得简单,因为返回的TcpClient可以附加到服务器上的特定客户端实例。但是我现在如何处理UdpClient,因为UDP是一个无连接协议?我也很好奇TcpClient如何知道首先将数据发送回哪台机器,特别是如果它坐在路由器后面。

我不相信udp数据包标题中的唯一ID,因为它们总是被伪造或被盗。

1 个答案:

答案 0 :(得分:0)

来自UdpClient.Receive Method (IPEndPoint):

的文档
  

remoteEP
  键入:System.Net.IPEndPoint
  一个IPEndPoint,表示从中发送数据的远程主机。

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

  

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

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