Networking 如何向位于同一局域网上的客户端发送UDP数据包

Networking 如何向位于同一局域网上的客户端发送UDP数据包,networking,udp,lan,Networking,Udp,Lan,我目前正在开发一款游戏的UDP网络 假设有两个玩家在同一个NAT/LAN上。因此,它们共享相同的外部IP。它们都加入了位于另一个位置且具有不同外部IP的同一个游戏服务器 游戏服务器如何通过局域网向特定玩家发送UDP数据包 当每个玩家都在不同的局域网上时,一切都很好,但是当两个或更多的玩家在同一个局域网上时,我不知道如何联系他们 顺便说一句,我用的是C#,但我想这并不重要。根据您的描述,我假设他们通过NATting设备访问服务器。在这种情况下,您无需做任何事情,两个客户端将被视为来自相同的IP地址

我目前正在开发一款游戏的UDP网络

假设有两个玩家在同一个NAT/LAN上。因此,它们共享相同的外部IP。它们都加入了位于另一个位置且具有不同外部IP的同一个游戏服务器

游戏服务器如何通过局域网向特定玩家发送UDP数据包

当每个玩家都在不同的局域网上时,一切都很好,但是当两个或更多的玩家在同一个局域网上时,我不知道如何联系他们


顺便说一句,我用的是C#,但我想这并不重要。

根据您的描述,我假设他们通过NATting设备访问服务器。在这种情况下,您无需做任何事情,两个客户端将被视为来自相同的IP地址但不同的源端口,因此很容易区分。

根据您的描述,我假设他们通过NATting设备访问服务器。在这种情况下,您无需执行任何操作,两个客户端将被视为来自相同的IP地址但不同的源端口,因此很容易区分。

Oh,但是我如何知道每个客户端正在使用的端口?UDP端口必须在客户端网关上转发吗?知道如果两个游戏客户端随机选择相同的源端口会发生什么吗?路由器通常会NAT源端口吗?是的,路由器会,其他地方不会工作。DNS名称解析一开始是基于UDP的,所以这是一个经过良好测试的功能。@asmo我不理解你的问题。但基本上,只要你把你的服务器代码建立在你真正收到的地址上(那将被NATting路由器转换),而不去猜测原始端口和地址是什么,它就可以工作。不要将这些信息嵌入协议本身,这会带来噩梦。对于客户端本身来说,服务器在LAN上或LAN之外没有任何区别。哦,但是我如何知道每个客户端使用的端口?UDP端口必须在客户端网关上转发吗?知道如果两个游戏客户端随机选择相同的源端口会发生什么吗?路由器通常会NAT源端口吗?是的,路由器会,其他地方不会工作。DNS名称解析一开始是基于UDP的,所以这是一个经过良好测试的功能。@asmo我不理解你的问题。但基本上,只要你把你的服务器代码建立在你真正收到的地址上(那将被NATting路由器转换),而不去猜测原始端口和地址是什么,它就可以工作。不要将这些信息嵌入协议本身,这会带来噩梦。对于客户机本身来说,服务器在LAN上或LAN之外没有任何区别。