tcp unity 图片_Unity3d中的Tcp socket通信(开源)

HiSocket_unity

如何使用

可以从此链接下载最新的unity package:

功能

Tcp socket

Udp socket

可伸缩字节表

高性能字节块缓冲区

消息注册和回调

二进制字节消息封装

Protobuf消息封装

AES消息加密

详情

Tcp和Udp都是采用主线程异步连接的方式(避免主线程阻塞).

启动发送线程和接收线程处理数据传输(提高性能).

供用户调用发送或接受数据的API在主线程中(方便直接操作unity的组件)

监听连接事件获得当前的连接状态.

监听接收事件获得接收的数据.

存在字节数组队列,方便用来测试和数据重发.

高性能字节缓冲区避免内存空间重复申请,减少GC.

如果使用Tcp协议需要实现IPackage接口处理粘包拆包.

Ping接口因为mono底层的bug会在.net2.0平台报错(.net 4.6 没有问题,或者也可以使用unity的接口获得Ping,工程中有示例代码)

细节

Tcp connection

Tcp协议传输字节流,用户需要分割字节流获得正确的数据包,当创建一个tcp协议的socket时,需要传入一个Package对象来封包和解包.

private IPackage _packer = new Packer();

void Test()

{

_tcp = new TcpConnection(_packer);

}

public class Packer : IPackage

{

public void Unpack(IByteArray reader, Queue receiveQueue)

{

//add your unpack logic here

}

public void Pack(Queue sendQueue, IByteArray writer)

{

// add your pack logic here

}

}

连接

_tcp.Connect("127.0.0.1", 7777);

断开连接

当不再运行时需要主动调用接口断开与服务器的连接(比如响应unity的onapplicationquit执行时)

void OnApplicationQuit()

{

_tcp.DisConnect();

}

连接状态变化

如果想获取当前的连接状态,可以订阅连接状态事件.

void Test()

{

_tcp.StateChangeEvent += OnState;

}

void OnState(SocketState state)

{

Debug.Log("current state is: " + sta

你可能感兴趣的:(tcp,unity,图片)