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;
//创建socket
mySocket = new Socket(
AddressFamily.InterNetwork,
SocketType.Stream, //支持可靠、双向和基于连接的字节流
ProtocolType.Tcp //使用“传输控制协议”
);
//将文本ip转换到ip地址类型,这里使用的是回环地址进行测试
ipAddr = IPAddress.Parse("127.0.0.1");
//绑定ip和端口,端口建议大于1500
ipEp = 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中运行客户端
在客户端中输入发送的消息,然后先点击“连接”按钮,再点击“发送按钮”,看看控制台程序是否有响应