如何在 C# 中使用 Unity UNET 获取本地网络中所有设备的 IP 地址?
How to get IP addresses of all devices in local network with Unity UNET in C#?
各位!
我在一个本地网络中有很多设备。如何获取所有这些设备的 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 客户端并从 #1 向该 IP 地址发送内容,该地址以 255
,然后听听IPAddress.Any
,看有没有反应。如果从任何服务器接收到 response/message,则将接收消息的 IP 存储到数组或 List
.
4。然后您可以使用 #3 中存储的 IP 来查找您网络上的所有可用设备。
Here 是一个工作示例。
不好的一面是,如果您有免费版的 Unity,它将无法工作。有一个限制要求您拥有 Unity Pro 才能使用来自 C# 的任何原始套接字 API。 对于 Unity 5[=64 不再适用=] 及以上。现在无需专业版许可即可在 Unity 5 及更高版本中使用。
2.NetworkDiscovery
好消息是 Unity 在 5.3 左右的版本中让您更容易做到这一点。我不记得是什么版本,但请确保拥有最新版本。您无需使用 Unity Pro 即可工作。
您可以在新版Unity中使用NetworkDiscovery class to do this。
只需调用 NetworkDiscovery.StartAsServer()
即可向客户端广播消息。在客户端,您可以通过调用NetworkDiscovery.StartAsClient()
来收听广播。您可以使用 OnReceivedBroadcast(string fromAddress, string data);
查看您从哪个设备接收。再简单不过了。
各位!
我在一个本地网络中有很多设备。如何获取所有这些设备的 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 客户端并从 #1 向该 IP 地址发送内容,该地址以 255
,然后听听IPAddress.Any
,看有没有反应。如果从任何服务器接收到 response/message,则将接收消息的 IP 存储到数组或 List
.
4。然后您可以使用 #3 中存储的 IP 来查找您网络上的所有可用设备。
Here 是一个工作示例。
不好的一面是,如果您有免费版的 Unity,它将无法工作。有一个限制要求您拥有 Unity Pro 才能使用来自 C# 的任何原始套接字 API。 对于 Unity 5[=64 不再适用=] 及以上。现在无需专业版许可即可在 Unity 5 及更高版本中使用。
2.NetworkDiscovery
好消息是 Unity 在 5.3 左右的版本中让您更容易做到这一点。我不记得是什么版本,但请确保拥有最新版本。您无需使用 Unity Pro 即可工作。
您可以在新版Unity中使用NetworkDiscovery class to do this。
只需调用 NetworkDiscovery.StartAsServer()
即可向客户端广播消息。在客户端,您可以通过调用NetworkDiscovery.StartAsClient()
来收听广播。您可以使用 OnReceivedBroadcast(string fromAddress, string data);
查看您从哪个设备接收。再简单不过了。