欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 【Unity】简单实现基于TCP的阻塞式Socket的文本消息通信

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

2025/4/27 14:51:38 来源:https://blog.csdn.net/qq_47009853/article/details/147441983  浏览:    关键词:【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中运行客户端

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词