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

Ily*_*kov 3 c# unity-game-engine 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Pro*_*mer 5

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

1个.UDP

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

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

2 .在所有游戏中启动UDP服务器并IPAddress.Any使用您想要的任何端口进行侦听。建议使用端口 >=9000。下面的端口通常被其他一些应用程序使用。如果从客户端收到任何消息,请将某些内容发送回客户端,让客户端知道您有空。

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

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

是一个工作示例。

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


2.网络发现

好消息是 Unity 在 5.3 左右的版本中让你更容易做到这一点。我不记得是什么版本,但请确保拥有最新版本。您不需要使用 Unity Pro 来执行此操作。

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