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

时间:2016-06-21 18:25:07

标签: c# unity3d unity3d-unet

大家好!

我在一个本地网络中有很多设备。我怎样才能获得所有这些设备的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 个答案:

答案 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);查看您收到的设备。它不可能比这更容易。