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

标签 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.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/

相关文章:

c# - CefSharp - 无法启用 webgl

android - 汽车游戏的建筑玩家

c# - 局域网多人场景切换

machine-learning - 在单程中将两个图像作为输入,将两个图像作为输出?

c# - C# Dictionary 在 C# in depth 2nd Edition 中是如何使用的?

c# - Asp.Net Core API 文件上传

c# - 如何在 C#/Vista 中将鼠标事件传递给我背后的应用程序?

c# - 在 Unity 上让 UI 文本弹出几秒钟

c# - 什么是 C# 中的 IEnumerator 以及它在 Unity 中的用途?

c# - 玩家移动时与子弹碰撞 - Unity UNET