新建一个Unity项目新建脚本编写客户端
using System.Net.Sockets;
using System.Net;
using System;
using System.Text;
public class Client : MonoBehaviour
{
private Socket socket;
//定义用来存消息的容器
private byte[] buffer = new byte[1024];
// Start is called before the first frame update
void Start()
{
//参数: IPV4协议, 套接字的传输类型(流式传输), socket传输协议(TCP)
socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream ,ProtocolType.Tcp);
//连接服务器: 服务器IP, 服务器端口号
socket.Connect("127.0.0.1", 6666); //连接完成
//连接成功调用接收方法异步接收消息
StartReceive();
//连接成功发送消息
Send();
}
//接收消息
void StartReceive()
{
socket.BeginReceive(buffer,0,buffer.Length,SocketFlags.None,ReceiveCallback,null);
}
//接收消息的回调方法(作为参数传递的函数)
void ReceiveCallback(IAsyncResult iar)
{
//接收返回消息长度
int len = socket.EndReceive(iar);
//接收为0代表终止连接
if (len == 0)
{
return;
}
//解析buffer
string str = Encoding.UTF8.GetString(buffer, 0, len);
Debug.Log(str);
//解析完在执行接收方法
StartReceive();
}
void Send()
{
socket.Send(Encoding.UTF8.GetBytes("服务器你好,我是客户端!"));
}
// Update is called once per frame
void Update()
{
}
}
创建一个空物体挂载客户端脚本
新建一个窗体应用编写服务端
using System.Net.Sockets;
using System.Net;
using System;
using System.Text;
public class Program
{
private static Socket socket;
private static byte[] buffer = new byte[1024];
static void Main(string[] args)
{
//初始化
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定
socket.Bind(new IPEndPoint(IPAddress.Any, 6666));
//监听: 挂起的连接队列最大长度 —— 同时处理连接请求的最大数,超出最大数会排队等待
socket.Listen(0);
StartAccept();
Console.Read(); //阻塞住让程序不会结束
}
//开始应答
static void StartAccept()
{
//开始异步应答连接 参数: 回调函数,object
socket.BeginAccept(AcceptCallback, null);
}
static void AcceptCallback(IAsyncResult iar)
{
//异步接受传入的连接尝试,并创建新的 Socket 来处理远程主机通信。
Socket client = socket.EndAccept(iar);
//开始接收
StartReceive(client);
//重新开始应答
StartAccept();
}
//接收消息
static void StartReceive(Socket client)
{
//开始从连接的 Socket 中异步接收数据
client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, client);
}
//回调函数
static void ReceiveCallback(IAsyncResult iar)
{
Socket client = iar.AsyncState as Socket;
//结束接收返回消息长度
int len = client.EndReceive(iar);
//接收为0代表终止连接
if (len == 0)
{
return;
}
//解析buffer
string str = Encoding.UTF8.GetString(buffer, 0, len);
Console.WriteLine(str);
//解析完在执行接收方法
StartReceive(client);
}
}
先运行服务端然后运行客户端