【问题标题】:How to get IP addresses of all devices in local network with Unity UNET in C#?如何在 C# 中使用 Unity UNET 获取本地网络中所有设备的 IP 地址?
【发布时间】:2016-10-23 10:38:28
【问题描述】:

大家!

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

【问题讨论】:

  • 什么类型的设备,您为什么要这样做?这是网络游戏吗?例如,要使用其 IP 连接到这些设备以进行多人游戏?
  • @Programmer 我想创建一个基于 UNet Messages 的多人游戏。我想创建一个大厅,客户端可以在其中连接到服务器,而无需硬编码服务器的 IP 地址。我把它想象成对本地网络中所有 IP 的调查,并接收有关什么是服务器的信息。抱歉英语和解释。
  • 我不明白问题的问题/问题/目标。如果您在网络中有设备,则不能只请求 IP。您需要一个服务器来连接客户端并管理所有游戏流程。我建议您阅读在线教程和 Unity 文档。
  • @IlyaGutnikov 我明白你在做什么。看我的回答。
  • @Cabrra 我需要这样的东西:stackoverflow.com/a/19945759/3884619

标签: c# unity3d unity3d-unet


【解决方案1】:

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

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 来查找网络上所有可用的设备。

Here 是一个工作示例。

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


2.NetworkDiscovery

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

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

【讨论】:

  • @IlyaGutnikov Np。也可以广播到255.255.255.255。我没有提到这一点,因为有时操作系统会阻止它。 192.octet.octet.25 更可靠。祝你好运。
  • 请注意,将最后一个八位字节设置为 255 并不总是能实现广播地址。广播地址是 IP 子网中的最后一个地址,不能分配给设备。上面的示例将使用 /24 (255.255.255.0) 您可以使用二进制数学计算广播地址,或者您可以查找子网计算器来轻松计算。 calculator.net/ip-subnet-calculator.html
猜你喜欢
  • 1970-01-01
  • 2019-01-29
  • 2019-11-25
  • 2014-11-05
  • 1970-01-01
  • 2012-11-04
  • 2012-11-20
  • 2015-12-06
  • 1970-01-01
相关资源
最近更新 更多