分为两个Unity项目
一个是SeverTest01 用于Unity的服务器部分
一个是SocketTest01 用于Unity的客户端部分 关于客户端部分的
初步学习只有简单的服务器和客户端连接,并且发送消息回复,算是一个学习记录
关于端口
0-65535其中0-1023叫做周知端口我们不能使用,这里使用的是10086端口,服务器端和客户端端口要一致才能连接得上
0-1023叫做周知端口
动态端口的范围是从49152到65535
注册端口端口1024到49151
代码展示
SeverTest01 部分 新建场景001 将Server挂到Camera上即可
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System;
/// <summary>
/// 可以供客户端和服务器一块使用
/// </summary>
public class TcpSocket
{
//当前实例化的socket
private Socket socket;
//socket上的数据
private byte[] data;
//区分服务器 还是客户端
private bool isServer;
public TcpSocket(Socket socket, int dataLength, bool isServer)
{
this.socket = socket;
data = new byte[dataLength];
this.isServer = isServer;
}
#region 接受
public void ClientReceive()
{
//data 数据缓存 0:指的是 接受位的偏移量 data.length指的是数据的长度 SocketFlags.None固定格式
//new AsyncCallback(ClientEndReceive)需要有返回值的回调函数,返回值是下面的方法
//public IAsyncResult BeginReceive(byte[] buffer, int offset, int size, SocketFlags socketFlags, AsyncCallback callback, object state);
socket.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ClientEndReceive), null);
}
public void ClientEndReceive(IAsyncResult ar)
{
//数据的处理
int receiveLength = socket.EndReceive(ar); //将接受到的数据赋值给receiveLength
//把接受完毕的字节数组转化为 string类型
string dataStr = System.Text.Encoding.UTF8.GetString(data, 0, receiveLength);
if (isServer) //判断是否接收到了因为开始设定了isServer是布尔值
{
Debug.Log("服务器接受到了:" + dataStr