当前位置: 首页 > 知识库问答 >
问题:

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

松茂实
2023-03-14

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

TcpListner使TCP变得容易,因为返回了一个TcpClient,我可以将它附加到服务器上的特定客户机实例。但是,既然UDP是一种无连接协议,我现在该如何处理UdpClient呢?我也很好奇TcpClient首先是如何知道将数据发送回哪台机器的,尤其是当它位于路由器后面的时候。

我不能信任udp数据包标头中的唯一ID之类的东西,因为这些总是可以伪造或窃取的。

共有1个答案

崔高远
2023-03-14

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

Remote teEP
类型:System.Net.IPEndPoint
表示发送数据的远程主机的IPEndPoint。

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

我还很好奇TcpClient如何知道首先要将数据发送回哪台机器,尤其是如果它位于路由器后面

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

 类似资料:
  • 我想做的是: 为了学习游戏编程,我使用专用服务器和UDP创建了一个回声设置。专用服务器在不同的城市(也就是不在我的本地网络中)。 在我的本地计算机上,我有一个udp客户端和服务器(两个不同的程序)。当我第一次启动python服务器时,windows防火墙立即询问我是否要添加异常。在允许我的python服务器联网之后,我仍然没有收到任何消息。(客户- 我的问题是: 游戏如何解决这个问题?我没有为我想

  • 我正在尝试使用UDP在服务器(在公共IP上)和客户端(通过NAT)之间进行双向通信。我的逻辑是,如果服务器向IP和它接收数据包的端口发送一些数据,客户端仍然应该得到它,因为NAT最终会有将数据包发送到客户端的映射。 客户端有 2 个进程,一个用于发送数据包,另一个进程用于接收数据。服务器继续等待数据,如果它获得数据,它会将数据发送回从接收数据的端口和 IP。 客户代码如下: client_recv

  • 我不知道是网络配置还是我的软件出了问题。 这是监听代码: 奇怪的是,在wireshark上,我可以看到:数据包已从发送到,并且设备已对此数据包作出响应--来自的数据包已发送到。使用bind(0.0.0.0,端口)似乎不能涵盖。我迷路了,一点主意都没有。 ifconfig为:

  • 我正在尝试使用Boost::asio进行简单的UDP客户端/服务器测试。我已经阅读了留档和官方教程,但我仍然无法正确使用。 我的问题特别是在客户端。下面是我希望客户端做的:它必须向运行在的服务器发送一个简单的数据报,然后侦听服务器发送的响应数据报。但这不是我得到的。看起来客户端正在发送数据报,但是在收到自己的数据报之后!在有人问“不”之前,服务器没有运行:-) 函数< code>send_data