当前位置: 首页 > news >正文

【Unity】简单实现基于TCP的阻塞式Socket的文本消息通信

1.准备工具

  • Unity:用于建立客户端
  • Visual Studio:通过C#控制台建立服务端

2.建立服务端

在Visual Studio中创建一个C#控制台工程,粘贴下面的代码

using System;
using System.Net.Sockets;
using System.Net;
namespace ConsoleApp1
{internal class Program{static void Main(string[] args){Socket mySocket;IPAddress ipAddr;IPEndPoint ipEp;int backLog = 0;//创建socketmySocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, //支持可靠、双向和基于连接的字节流ProtocolType.Tcp //使用“传输控制协议”);//将文本ip转换到ip地址类型,这里使用的是回环地址进行测试ipAddr = IPAddress.Parse("127.0.0.1");//绑定ip和端口,端口建议大于1500ipEp = new IPEndPoint(ipAddr, 8888);//绑定套接字mySocket.Bind(ipEp);//建立监听,但是这个是一个阻塞函数,因此不要在Unity里面跑,否则会卡死mySocket.Listen(backLog);while(true){//定义一个新的Socket来接收消息Socket conn = mySocket.Accept();//创建一个缓存器,用于存储字节流消息byte[] readBuff = new byte[1024];//接收字节数组长度int count = conn.Receive(readBuff);//将字节数组转换为文本string message = System.Text.Encoding.UTF8.GetString(readBuff, 0, count);//创建服务端的消息回应文本string response = $"Hello from server {message}";//打印回应消息Console.WriteLine(response);//将消息回应文本转换为字节数组byte[] responseBytes = System.Text.Encoding.Default.GetBytes(response);//发送回应消息conn.Send(responseBytes);}mySocket.Close();Console.ReadKey();}}
}

3.建立客户端

在Unity中创建一个测试项目,搭建一个简单的UI,请看下面定义的UI变量需求。(这里我使用了TextMeshPro的UI类型,你可以修改为Unity旧版的UI变量类型)

创建一个C#脚本,取名为“Client”,将下面的代码粘贴,然后挂载到一个空物体上,将UI变量在Inspector窗口中进行赋值

using System.Net;
using System.Net.Sockets;
using System.Text;
using UnityEngine;
using TMPro;public class Client : MonoBehaviour
{public TMP_InputField ipInput;public TMP_InputField messageInput;public Socket clientSocket;public IPAddress ipAddr;public IPEndPoint ipEp;/// <summary>/// 连接服务端/// 该函数请绑定一个“连接”按钮的点击事件/// 每次点击“发送”之前,请先点击“连接”按钮!!!/// </summary>public void Connect(){clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, //支持可靠、双向和基于连接的字节流ProtocolType.Tcp //使用“传输控制协议”);//将文本ip转换到ip地址类型ipAddr = IPAddress.Parse("127.0.0.1");//绑定ip和端口ipEp = new IPEndPoint(ipAddr, 8888);//连接clientSocket.Connect(ipEp);}/// <summary>/// 发送消息/// 该函数请绑定一个“发送”按钮的点击事件/// 每次点击发送之前,请先点击“连接”按钮!!!/// </summary>public void SendMessage(){//将消息文本转换为字节数组byte[] responseBytes = System.Text.Encoding.Default.GetBytes(messageInput.text);//发送回应消息clientSocket.Send(responseBytes);}
}

4.测试项目

先在Visual Studio运行服务端程序(不要关闭),然后在Unity中运行客户端

在客户端中输入发送的消息,然后先点击“连接”按钮,再点击“发送按钮”,看看控制台程序是否有响应

相关文章:

  • 极狐GitLab 如何撤销变更?
  • git提交
  • [java八股文][Java基础面试篇]I/O
  • 缓存与数据库一致性方案
  • 二进制部署Kubernetes1.32.4最新版本高可用集群及附加组件
  • 最新扣子(Coze)案例教程:Excel数据生成统计图表,自动清洗数据+转换可视化图表+零代码,完全免费教程
  • 【TeamFlow】4.3.4 长度单位
  • FPGA开发流程初识
  • WPF 图片文本按钮 自定义按钮
  • 人工智能华迪杯比赛项目推荐
  • xcode 16 遇到contains bitcode
  • 深度剖析塔能科技精准节能方案:技术创新与实践价值
  • 人爱科技-RACRM客户管理系统介绍
  • 如何开启远程桌面连接外网访问?异地远程控制内网主机
  • Javashop新零售电商系统:构建智能零售生态的终极解决方案
  • 【计算机网络】现代网络技术核心架构与实战解析
  • 路由与OSPF学习
  • Collection集合,List集合,set集合,Map集合
  • “该虚拟机似乎正在使用中“
  • 全面解析 classification_report:评估分类模型性能的利器
  • 商务部召开外资企业圆桌会
  • 上海咖啡消费有多“嗲”?咖啡馆已逾9000家,咖啡节主市集持续4天
  • 上海体育消费节将从5月持续至11月,推出运动装备商品促销活动
  • 特朗普激发加拿大爱国热情之下:大选提前投票人数创纪录,魁北克分离情绪被冲淡
  • 职工疗休养如何告别千篇一律?安徽含山给出新解法
  • 门票在“缩水”,古镇怎么办