大家好!
我在一个本地网络中有很多设备。我怎样才能获得所有这些设备的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<string> getIPArray() {
List<string> listIP = new List<string>();
return listIP;
}
}
答案 0 :(得分:4)
有两种方法可以做到这一点:
<强> 1 强> .UDP
这是一个漫长的过程,但可以通过UDP完成。
1 。首先要做的是获取本地IP地址。如果您的本地IP为192.168.1.13
,则必须取出最后一个为13的八位字节并将其替换为255
。
2 。在所有游戏中启动UDP服务器,并使用您想要的任何端口收听IPAddress.Any
。建议使用端口&gt; = 9000。以下端口通常由其他一些应用程序使用。如果从客户收到任何内容,请将某些内容发回给客户,让客户知道您可以使用。
3 。要搜索游戏,请创建一个UDP客户端,并从#1 以255
结尾的IP地址发送内容,然后收听听IPAddress.Any
看是否有回应。如果从任何服务器收到响应/消息,请将收到消息的IP存储到阵列或List
。
4 。然后,您可以使用#3 中存储的IP来查找网络上的所有可用设备。
Here是一个有效的例子。
关于这一点的不好的一面是,如果您拥有Unity的免费版本,它将无效。有一个限制要求您拥有Unity Pro才能使用C#中的任何原始套接字API。不再适用于 Unity 5 及更高版本。现在,无需专业许可即可在Unity 5及更高版本中使用它。
<强> 2 强> .NetworkDiscovery
好消息是Unity在5.3版左右让你更容易。我不记得是什么版本,但请确保拥有最新版本。您无需使用Unity Pro即可运行此功能。
您可以使用NetworkDiscovery课程在新版本的Unity中执行this。
只需致电NetworkDiscovery.StartAsServer()
即可向客户广播消息。在客户端,您可以通过呼叫NetworkDiscovery.StartAsClient()
来收听广播。您可以使用OnReceivedBroadcast(string fromAddress, string data);
查看您收到的设备。它不可能比这更容易。