首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2013-04-09 
Socket一个数据包应该怎样表示我现在要做一个简单的tcp通讯 发送这种类型的数据包请问这种数据应该怎样来

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[]。

热点排行