一、说明
阅读本文前,推荐阅读
- SuperSocket官方中文文档http://docs.supersocket.net/v1-6/zh-CN
- SuperSocket ClientEngine使用说明https://github.com/kerryjiang/SuperSocket.ClientEngine
二、客户端工程
- 项目下载http://url.cn/5ESa2QC,密码RjKzWr
- 本项目使用Unity3D5.4.1
- 使用SuperSocket ,Unity3D要使用.net 2.0版本
- 复制SuperSocket.ClientEngine.dll,SuperSocket.ProtoBase.dll到Unity3D工程Plugins目录下
- 使用SuperSocket头部格式固定并且包含内容长度的协议模版(FixedHeaderReceiveFilter),头部固定两个字节,高字节在前,低字节再后,具体可参考代码
using UnityEngine;
using SuperSocket.ProtoBase;
using System.Text;
public class PingFixedHeaderReceiveFilter : FixedHeaderReceiveFilter<PingBinaryRequestInfo> {
public PingFixedHeaderReceiveFilter() : base(2)
{
}
int GetBodyLength(byte[] length)
{
return (int)length[0] * 256 + (int)length[1];
}
protected override int GetBodyLengthFromHeader(IBufferStream bufferStream, int length)
{
byte[] length1 = new byte[2];
bufferStream.Read(length1, 0, 2);
int bodyLength = GetBodyLength(length1);
return bodyLength;
}
public override PingBinaryRequestInfo ResolvePackage(IBufferStream bufferStream)
{
byte[] length1 = new byte[2];
bufferStream.Read(length1, 0, 2);
int bodyLength = GetBodyLength(length1);
byte[] data1 = new byte[bodyLength];
bufferStream.Read(data1, 0, bodyLength);
PingBinaryRequestInfo requestInfo = new PingBinaryRequestInfo(Encoding.UTF8.GetString(data1), data1);
return requestInfo;
}
}
- 使用EasyClient连接服务器
void Connect()
{
if (null != _easyClient)
{
_easyClient.Close();
_easyClient = null;
}
_easyClient = new EasyClient();
_easyClient.Initialize(new PingFixedHeaderReceiveFilter(), OnReceiveHandler);
_easyClient.Connected += ConnectedHandler;
_easyClient.Error += ErrorHandler;
_easyClient.Closed += ClosedHandler;
_easyClient.BeginConnect(new DnsEndPoint("120.25.148.37", 9090));
}
- 使用EasyClient定时发送数据
void SendMessage()
{
if (null != _easyClient && _easyClient.IsConnected)
{
byte[] data1 = Encoding.UTF8.GetBytes("PING");
byte[] data2 = new byte[] { (byte)(data1.Length / 256), (byte)(data1.Length % 256) };
byte[] sendData = new byte[data1.Length + data2.Length];
Array.Copy(data2, 0, sendData, 0, data2.Length);
Array.Copy(data1, 0, sendData, data2.Length, data1.Length);
_easyClient.Send(sendData);
_lastSendTime = DateTime.Now;
Debug.Log("SendMessage _lastSendTime : " + _lastSendTime.Millisecond);
}
网友评论