ab56a9bcf7
SVN-Revision: r240
244 lines
8.9 KiB
C#
244 lines
8.9 KiB
C#
/******************************
|
|
* 说明:Socket传输数据类
|
|
* 创建人:龚宇超
|
|
* 创建日期:2018-01-23
|
|
* 修改人:
|
|
* 修改日期:
|
|
* 修改备注:
|
|
* 版本:1.0.0.0
|
|
******************************/
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace Lskj.SocketService
|
|
{
|
|
/// <summary>
|
|
/// Socket传输数据类
|
|
/// </summary>
|
|
public class DynamicBufferManager
|
|
{
|
|
/// <summary>
|
|
///存放内存的数组
|
|
/// </summary>
|
|
/// <value>The buffer.</value>
|
|
public byte[] Buffer { get; set; }
|
|
/// <summary>
|
|
/// 写入数据大小
|
|
/// </summary>
|
|
/// <value>The data count.</value>
|
|
public int DataCount { get; set; }
|
|
|
|
public DynamicBufferManager(int bufferSize)
|
|
{
|
|
DataCount = 0;
|
|
Buffer = new byte[bufferSize];
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>说明:获得当前写入的字节数</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-01-24 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <returns>System.Int32.</returns>
|
|
public int GetDataCount()
|
|
{
|
|
return DataCount;
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:获得剩余的字节数</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-01-24 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <returns>System.Int32.</returns>
|
|
public int GetReserveCount()
|
|
{
|
|
return Buffer.Length - DataCount;
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:清除数据</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-01-24 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
public void Clear()
|
|
{
|
|
DataCount = 0;
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:清理指定大小的数据</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-01-24 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="count">The count.</param>
|
|
public void Clear(int count)
|
|
{
|
|
if (count >= DataCount) //如果需要清理的数据大于现有数据大小,则全部清理
|
|
{
|
|
DataCount = 0;
|
|
}
|
|
else
|
|
{
|
|
for (int i = 0; i < DataCount - count; i++) //否则后面的数据往前移
|
|
{
|
|
Buffer[i] = Buffer[count + i];
|
|
}
|
|
DataCount = DataCount - count;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:设置缓存大小</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-01-24 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="size">The size.</param>
|
|
public void SetBufferSize(int size)
|
|
{
|
|
if (Buffer.Length < size)
|
|
{
|
|
byte[] tmpBuffer = new byte[size];
|
|
Array.Copy(Buffer, 0, tmpBuffer, 0, DataCount); //复制以前的数据
|
|
Buffer = tmpBuffer; //替换
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:写入数据</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-01-24 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="buffer">The buffer.</param>
|
|
/// <param name="offset">The offset.</param>
|
|
/// <param name="count">The count.</param>
|
|
public void WriteBuffer(byte[] buffer, int offset, int count)
|
|
{
|
|
if (GetReserveCount() >= count) //缓冲区空间够,不需要申请
|
|
{
|
|
Array.Copy(buffer, offset, Buffer, DataCount, count);
|
|
DataCount = DataCount + count;
|
|
}
|
|
else //缓冲区空间不够,需要申请更大的内存,并进行移位
|
|
{
|
|
int totalSize = Buffer.Length + count - GetReserveCount(); //总大小-空余大小
|
|
byte[] tmpBuffer = new byte[totalSize];
|
|
Array.Copy(Buffer, 0, tmpBuffer, 0, DataCount); //复制以前的数据
|
|
Array.Copy(buffer, offset, tmpBuffer, DataCount, count); //复制新写入的数据
|
|
DataCount = DataCount + count;
|
|
Buffer = tmpBuffer; //替换
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:写入数据</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-01-24 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="buffer">The buffer.</param>
|
|
public void WriteBuffer(byte[] buffer)
|
|
{
|
|
WriteBuffer(buffer, 0, buffer.Length);
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:写入Short</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-01-24 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="value">The value.</param>
|
|
/// <param name="convert">if set to <c>true</c> [convert].</param>
|
|
public void WriteShort(short value, bool convert)
|
|
{
|
|
if (convert)
|
|
{
|
|
value = System.Net.IPAddress.HostToNetworkOrder(value); //NET是小头结构,网络字节是大头结构,需要客户端和服务器约定好
|
|
}
|
|
byte[] tmpBuffer = BitConverter.GetBytes(value);
|
|
WriteBuffer(tmpBuffer);
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:写入Int</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-01-24 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="value">The value.</param>
|
|
/// <param name="convert">if set to <c>true</c> [convert].</param>
|
|
public void WriteInt(int value, bool convert)
|
|
{
|
|
if (convert)
|
|
{
|
|
value = System.Net.IPAddress.HostToNetworkOrder(value); //NET是小头结构,网络字节是大头结构,需要客户端和服务器约定好
|
|
}
|
|
byte[] tmpBuffer = BitConverter.GetBytes(value);
|
|
WriteBuffer(tmpBuffer);
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:写入Long</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-01-24 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="value">The value.</param>
|
|
/// <param name="convert">if set to <c>true</c> [convert].</param>
|
|
public void WriteLong(long value, bool convert)
|
|
{
|
|
if (convert)
|
|
{
|
|
value = System.Net.IPAddress.HostToNetworkOrder(value); //NET是小头结构,网络字节是大头结构,需要客户端和服务器约定好
|
|
}
|
|
byte[] tmpBuffer = BitConverter.GetBytes(value);
|
|
WriteBuffer(tmpBuffer);
|
|
}
|
|
/// <summary>
|
|
/// <para>说明:写入String</para>
|
|
/// <para>创建人:龚宇超</para>
|
|
/// <para>创建日期:2018-01-24 </para>
|
|
/// <para>修改人:</para>
|
|
/// <para>修改日期:</para>
|
|
/// <para>修改备注:</para>
|
|
/// <para>版本:1.0</para>
|
|
/// </summary>
|
|
/// <param name="value">The value.</param>
|
|
public void WriteString(string value) //文本全部转成UTF8,UTF8兼容性好
|
|
{
|
|
byte[] tmpBuffer = Encoding.UTF8.GetBytes(value);
|
|
WriteBuffer(tmpBuffer);
|
|
}
|
|
}
|
|
}
|