Unity客户端-服务器基本问题

g_l

我一直在尝试进行简单的联网,在其中我可以将消息从一台设备发送到另一台设备。我最初的想法是“使用统一多人游戏功能我需要付费吗?” 因此我发现这篇文章看起来很清晰,直接解释了我将如何进行联网以代表我维持零成本。经过进一步的搜索,我发现一些统一的文档,这些文档似乎在解释如何以与上一篇文章中描述的相同的方式简单地进行网络连接,而忽略了我想要的简单低级API消息发送。[重要说明:我使用C#工作]

但是,我似乎在这次探索之旅中停下来了,因为我没有找到更多文章或视频来指导我并回答我仍然对这是如何工作的问题。

因此,今天我问:

A-您是否知道其他任何文章或视频可以指导我进行此操作?

B-我的方向完全错误吗?

C-您能回答以下我的任何关键问题吗?

  1. 在创建服务器时,即在下面时,我应该监听哪个端口,并且应该担心“端口转发”,这是我经常不屑一顾的短语。

    NetworkServer.Listen(4444);

  2. 在创建客户端时,即在下面时,我应该使用哪个IP地址?我想这是客户端设备的设备,但是我怎么知道它是什么?

    myClient.Connect(“ 127.0.0.1”,4444);

  3. 我如何获得2台设备进行连接,我的想法是使任何设备默认情况下都成为客户端,然后以某种方式“检查服务器”,如果没有,它将使用本地客户端创建自己的服务器以供客户端连接,不会有多余的服务器...?

非常感谢您阅读我的问题,希望它看起来很清楚,请检查链接,这样对您有意义。任何答案都将受到极大的赞赏,这样我就可以继续我的理解之旅。

程序员
  1. 我应该监听哪个端口,我应该担心“端口转发”这个词,我经常看到这个词。

这取决于你。您可以使用所需的任何端口。正确的方法是10为游戏选择1端口,然后选择端口作为默认端口。例如,让我们从port10000选择10010让我们将port10000设置为默认的游戏端口。

如果您尝试使用默认端口10000连接到该NetworkServer.Listen(10000)端口但有另一个软件正在使用该端口,或者该端口不可用,NetworkServer.Listen则将返回false并抛出以下异常:

无法在IP {*}和端口{10000}上打开套接字;请检查您的网络,很可能端口已被占用

发生这种情况时,您可以尝试下一个端口,另一个下一个端口和另一个端口,直到达到最大游戏端口为10010

此外,在你的游戏指令,可以指示玩家开放的端口10000,以10010它们在连接到其他玩家的问题时。

实现(阅读代码注释):

int minPort = 10000;
int maxPort = 10010;
int defaultPort = 10000;

//Creates a server then returns the port the server is created with. Returns -1 if server is not created
int createServer()
{
    int serverPort = -1;
    //Connect to default port
    bool serverCreated = NetworkServer.Listen(defaultPort);
    if (serverCreated)
    {
        serverPort = defaultPort;
        Debug.Log("Server Created with deafault port");
    }
    else
    {
        Debug.Log("Failed to create with the default port");
        //Try to create server with other port from min to max except the default port which we trid already
        for (int tempPort = minPort; tempPort <= maxPort; tempPort++)
        {
            //Skip the default port since we have already tried it
            if (tempPort != defaultPort)
            {
                //Exit loop if successfully create a server
                if (NetworkServer.Listen(tempPort))
                {
                    serverPort = tempPort;
                    break;
                }

                //If this is the max port and server is not still created, show, failed to create server error
                if (tempPort == maxPort)
                {
                    Debug.LogError("Failed to create server");
                }
            }
        }
    }
    return serverPort;
}

用法:

void Start()
{
    int serverPort = createServer();
    if (serverPort != -1)
    {
        Debug.Log("Server created on port : " + serverPort);
    }
    else
    {
        Debug.Log("Failed to create Server");
    }
}
  1. 在创建客户端时,即在下面时,我应该使用哪个IP地址?我想这是客户端设备的设备,但是我怎么知道它是什么?

在过去,您必须使用UDP将IP广播到网络。简而言之,您可以从计算机获取IP地址,然后将其广播到255.255.255.255

您也可以广播到IP地址的修改版本。假设您的ip为192.168.1.13,则应删除13(最后一个八位位组),然后将其替换为255,然后将ip广播到192.168.1.255在这里进一步解释了这一点

了解什么是广播很重要,但是Unity通过创建广播API NetworkDiscovery使广播变得更简单

要知道要连接到哪个IP地址,只需NetworkDiscovery.StartAsServer()Start()函数中的服务器端调用即可

在您的客户端上,调用,NetworkDiscovery.StartAsClient()然后实现该OnReceivedBroadcast(string fromAddress, string data);功能。当找到服务器时,OnReceivedBroadcast(string fromAddress,string data); 将被调用,然后您可以使用返回的fromAddress值连接到服务器。

这也应该回答您的#3问题。另外,很高兴您发现我的其他答案很有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有关JWT(服务器端和客户端)的一些基本问题

来自分类Dev

Unity TCP服务器/客户端

来自分类Dev

TCP客户端-服务器程序的问题

来自分类Dev

C客户端/服务器问题

来自分类Dev

SignalR客户端-服务器连接问题

来自分类Dev

Java客户端/服务器套接字问题

来自分类Dev

客户端解析服务器问题

来自分类Dev

客户端-服务器插座

来自分类Dev

测试客户端服务器

来自分类Dev

客户端/服务器编程

来自分类Dev

iOS客户端服务器

来自分类Dev

SocketChannel 客户端-服务器

来自分类Dev

Unity如何使用NetworkDiscovery从客户端查找服务器

来自分类Dev

客户端尝试连接到未运行的C#服务器时,Unity冻结

来自分类Dev

客户端尝试连接到未运行的C#服务器时,Unity冻结

来自分类Dev

客户端上的Java客户端-服务器问题(无System.out)

来自分类Dev

客户端与服务器端模板(哪个?)

来自分类Dev

Mongodb服务器端与客户端处理

来自分类Dev

客户端服务器端模板nodejs

来自分类Dev

在服务器端访问客户端变量

来自分类Dev

服务器端或客户端渲染

来自分类Dev

客户端服务器端模板nodejs

来自分类Dev

在客户端委派服务器端验证

来自分类Dev

客户端数据到服务器端

来自分类Dev

客户端<script>标记内的服务器端经典ASP代码存在问题

来自分类Dev

从客户端将JSON解析回服务器端的JSONObject的问题

来自分类Dev

客户端/服务器:从客户端运行“ nano编辑器”命令

来自分类Dev

基本的流星用户订阅不符合客户端服务器的要求

来自分类Dev

具有多个客户端的UDP服务器的基本原理