【Unity笔记】使用Udp与腾讯云服务器端交互

本人一个网络小白,最近买了一台腾讯云服务器,经过多次百度踩坑,也算实现了使用Udp与云服务器基础交互,记录下几个关键步骤防止遗忘 ^ V ^…


1.配置 宝塔面板

由于我买的就是宝塔腾讯云专享版,所有就比较简单了
登录实例,执行给的命令,获取宝塔账号密码,然后打开宝塔面板,登录即可
在这里插入图片描述
在这里插入图片描述


2.回到Unity写云服务器端代码

云服务器端代码很简单,开一个线程循环接收客户端发来的信息,并打印出来

using System.Net;
using System.Net.Sockets;
using System.Threading;
using UnityEngine;

public class Server : MonoBehaviour
{
    
    
    private UdpClient myClient;
    private Thread receiveThread;

    private void Start()
    {
    
    
        myClient = new UdpClient(7788);
        myClient.JoinMulticastGroup(IPAddress.Parse(ZuBoSender.zuBoIp));

        receiveThread = new Thread(ReceiveData);
        receiveThread.Start();
    }

    private void ReceiveData()
    {
    
    
        IPEndPoint receEP = null;
        byte[] receData = myClient.Receive(ref receEP);
        string receStr = System.Text.Encoding.Default.GetString(receData);
        Debug.Log(receStr);
        ReceiveData();
    }



    private void OnDestroy()
    {
    
    
        myClient.Close();
        myClient.Dispose();
    }

}

场景只有一个物体和一个脚本,直接发布出来,由于我的云服务器是Linux系统,所以要发布Linux平台,并且Server Build要勾上。
在这里插入图片描述
没有Linux平台选项,在Unity Hub中给你的Unity添加Linux 开发支持模块
在这里插入图片描述

导出,这个x86_64后缀的文件是Linux的可执行文件:
在这里插入图片描述


3.将发布出来的文件上传至云服务器

宝塔面板中选择文件,找到root目录点进去,点击上传,选择上传目录,选择发布出的文件目录,点击开始上传。
在这里插入图片描述


4.上传完成后运行可执行程序

如何运行呢?宝塔面板点击“终端”,点击+号,输入服务器账号密码,点击登录,如果忘记密码回腾讯云重置密码或者直接在腾讯云中执行终端命令。
在这里插入图片描述
输入指令【 cd 你的文件夹名】,回车
再输入指令【./你的项目名.x86_64】回车
这样就程序就在执行了
在这里插入图片描述


5.回到Unity写发送端代码:

代码依旧很简单,按下A键,就给云服务器端发送一个HelloWorld

using System.Text;
using System.Net;
using System.Net.Sockets;
using UnityEngine;

public class UdpSender : MonoBehaviour
{
    
    
    private IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse("101.43.223.102"), 7788);//接收方的 “IP + 端口”
    private UdpClient myClient;

    void Start()
    {
    
    
        myClient = new UdpClient();//构建自身
    }
    void OnDestroy()
    {
    
    
        myClient.Close();
        myClient.Dispose();
    }
    void Update()
    {
    
    
        if (Input.GetKeyDown(KeyCode.A))
            SendStr("Hello,World");
    }


    void SendStr(string str)
    {
    
    
        byte[] bs = Encoding.Default.GetBytes(str);
        myClient.Send(bs, bs.Length, iPEndPoint);//(数据包,包长度,目标IPEndPoint)
    }
}

挂任意物体上,按下A键测试,发现服务器端并没有打印出来任何东西,这是因为腾讯云的防火墙并没有开放我们的端口号,回到腾讯云,选择防火墙,点击添加规则,协议选择UDP,端口号即第2步代码中声明的哪个端口
在这里插入图片描述
接下来就没有问题了,在Unity中运行场景,按下A键,再看云服务器这里,就打印出了HelloWorld
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_55907341/article/details/123151954