读书人

Socket 一个数据包应当怎样表示

发布时间: 2013-04-09 16:45:09 作者: rapoo

Socket 一个数据包应该怎样表示
我现在要做一个简单的tcp通讯 发送这种类型的数据包Socket  一个数据包应当怎样表示

请问这种数据应该怎样来定义? socket tcp
[解决办法]


//定义数据段类型枚举
public enum Type
{
zdfs
}

public class Test
{

public void aaa()
{
byte[] send = new byte[1024 * 10]; //打包后的字节数组
string baoliu1 = "aa"; //保留字段一
string baoliu2 = "bb"; //保留字段二
string tdId = "123"; //通道编号
ushort stPoint = 1; //温度开始点
ushort sjjg = 1; //数据点间隔
ushort sjdgs = 1; //数据点个数
int cjjgcs = 1; //采集间隔次数

int typeLen = 4; //枚举值长度为4 如果传字符串就参考保留字节的传法
byte[] typeByte = BitConverter.GetBytes(Convert.ToInt32(Type.zdfs));

int baoliu1Len = baoliu1.Length; //保留字段一的长度
byte[] baoliu1LenByte = BitConverter.GetBytes(baoliu1Len);//长度数组
byte[] baoliu1Byte = Encoding.UTF8.GetBytes(baoliu1); //保留字段一本身的数组

int baoliu2Len = baoliu2.Length;
byte[] baoliu2LenByte = BitConverter.GetBytes(baoliu2Len);
byte[] baoliu2Byte = Encoding.UTF8.GetBytes(baoliu2);

int tdIdLen = tdId.Length;
byte[] tdIdLenByte = BitConverter.GetBytes(tdIdLen);
byte[] tdIdByte = Encoding.UTF8.GetBytes(tdId);

byte[] stPointByte = BitConverter.GetBytes(stPoint); //固定长度为4

byte[] sjjgByte = BitConverter.GetBytes(sjjg); //固定长度为4



byte[] sjdgsByte = BitConverter.GetBytes(sjdgs); //固定长度为4

byte[] cjjgcsByte = BitConverter.GetBytes(cjjgcs); //固定长度为4

typeByte.CopyTo(send, 0);
baoliu1LenByte.CopyTo(send, 4);
baoliu2LenByte.CopyTo(send, 8);
tdIdLenByte.CopyTo(send, 12);
stPointByte.CopyTo(send, 28);
sjjgByte.CopyTo(send, 32);
sjdgsByte.CopyTo(send, 36);
cjjgcsByte.CopyTo(send, 40);

}
}

int typeLen=Convert.ToInt32(Type.zdfs);
byte[] typeLenByte= BitConvert


[解决办法]
除了Array.Copy以外,你也可以:

new MemoryStream() 对象实例,然后调用它的 write() 方法顺序写入数据,写完之后调用其 ToArray() 方法得到合成之后的 byte[]。

读书人网 >C#

热点推荐