如何使用C#中的Unity UNET获取本地网络中所有设备的IP地址?

大家!

我在一个本地网络中有很多设备。 我怎样才能获得所有这些设备的IP地址?

我想做这样的事情:

using UnityEngine; using System.Collections; using System.Collections.Generic; public class Tools : MonoBehaviour { //get local ip address public string getIP() { string IP = ""; IP = Network.player.ipAddress; return IP; } //get all ip addresses in local network public List getIPArray() { List listIP = new List(); return listIP; } } 

有两种方法可以做到这一点:

1 .UDP

这是一个漫长的过程,但可以使用UDP完成。

1。首先要做的是获取本地IP地址。 如果您的本地IP是192.168.1.13 ,则必须取出最后一个为13的八位字节并将其替换为255

2.在所有游戏中启动UDP服务器并使用您想要的任何端口监听IPAddress.Any 。 建议使用端口> = 9000。 以下端口通常由其他一些应用程序使用。 如果从客户收到任何内容,请将某些内容发回给客户,让客户知道您可以使用。

3.搜索游戏,创建一个UDP客户端并从#1255结尾发送一些IP地址,然后监听IPAddress.Any以查看是否有响应。 如果从任何服务器收到响应/消息,请将接收消息的IP存储到arrays或List

4.然后,您可以使用#3中存储的IP来查找网络上的所有可用设备。

这是一个有效的例子。

关于这一点的不好的一面是,如果您拥有Unity的免费版本,它将无法运行。 有一个限制要求您使用Unity Pro才能使用C#中的任何原始套接字API Unity 5及更高版本不再适用。 现在可以在Unity 5及更高版本中使用它而无需专业许可证。


2.NetworkDiscovery

好消息是Unity在5.3版左右让你更容易。 我不记得是什么版本,但请确保拥有最新版本。 您无需使用Unity Pro即可运行此function。

您可以使用NetworkDiscovery类在Unity的新版本中执行此操作 。 只需调用NetworkDiscovery.StartAsServer()即可向客户端广播消息。 在客户端,您可以通过调用NetworkDiscovery.StartAsClient()来收听广播。 您可以使用OnReceivedBroadcast(string fromAddress, string data); 查看您收到的设备。 它不可能比这更容易。