本人一个网络小白,最近买了一台腾讯云服务器,经过多次百度踩坑,也算实现了使用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