大家好!
我在一个本地网络中有很多设备。我怎样才能获得所有这些设备的 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;
}
}
最佳答案
有两种方法:
1.UDP
这是一个漫长的过程,但可以通过 UDP 完成。
1。首先要做的是获取您的本地 IP 地址。如果您的本地 ip 是 192.168.1.13
,则必须取出最后一个八位字节 13 并将其替换为 255
。
2。在所有游戏中启动 UDP 服务器,并使用您想要的任何端口收听 IPAddress.Any
。建议使用 >=9000 的端口。以下端口通常被其他一些应用程序使用。如果从客户那里收到任何东西,请将一些东西发回给客户,让客户知道您有空。
3。要搜索游戏,请创建一个 UDP 客户端并从以 255
结尾的 #1 向该 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要做的课this在新版本的 Unity 中。
只需调用 NetworkDiscovery.StartAsServer()
即可向客户端广播消息。在客户端,您可以通过调用 NetworkDiscovery.StartAsClient()
收听广播。您可以使用 OnReceivedBroadcast(string fromAddress, string data);
来查看您是从哪个设备接收到的。再简单不过了。
关于c# - 如何在 C# 中使用 Unity UNET 获取本地网络中所有设备的 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37951902/