3

每个人!

我在一个本地网络中有很多设备。如何获取所有这些设备的 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;
    }
}
4

1 回答 1

5

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

1 .UDP

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

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

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

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

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

是一个工作示例。

不利的一面是,如果您拥有 Unity 的免费版本,它将无法工作。有一个限制要求您拥有 Unity Pro 才能使用来自 C# 的任何原始套接字 APIUnity 5及更高不再适用现在无需专业许可证即可在 Unity 5 及更高版本中使用。


2.网络发现

好消息是 Unity 在 5.3 左右版本中让您更容易做到这一点。我不记得是什么版本,但请确保拥有最新版本。您无需使用 Unity Pro 即可工作。

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

于 2016-06-21T19:37:15.033 回答