Пример #1
0
        static void DataOn(byte[] data)
        {
            ReadBytes read = new ReadBytes(data);

            int lengt = read.ReadInt32();
           

            if (lengt == read.Length)
            {
                int cmd = read.ReadInt32();

                switch (cmd)
                {
                    case 1000:
                        {
                            string msg = read.ReadString();

                            Console.WriteLine(msg);

                        }
                        break;
                }

            }

        }
Пример #2
0
        protected virtual void ReadResult(ReadBytes read)
        {
            var id = read.ReadInt64();

            if (id.HasValue)
            {
                if ((read.ReadBoolean()).Value) //is error
                {
                    AsyncBackResult(new Result()
                    {
                        Id       = id.Value,
                        ErrorId  = (read.ReadInt32()).Value,
                        ErrorMsg = read.ReadString()
                    });
                }
                else
                {
                    var           count = (read.ReadInt32()).Value;
                    List <byte[]> args  = new List <byte[]>(count);
                    for (int i = 0; i < count; i++)
                    {
                        args.Add(read.ReadArray());
                    }

                    AsyncBackResult(new Result(args)
                    {
                        Id = id.Value
                    });
                }
            }
            else
            {
                throw new NetxException($"data error:2500", ErrorType.ReadErr);
            }
        }
Пример #3
0
        static void DataOn(byte[] data)
        {
            ReadBytes read = new ReadBytes(data);

            int lengt = read.ReadInt32();


            if (lengt == read.Length)
            {
                int cmd = read.ReadInt32();

                switch (cmd)
                {
                case 1000:
                {
                    string msg = read.ReadString();

                    count++;

                    if (count >= 100000)
                    {
                        stop.Stop();
                        Console.WriteLine(count + ":" + msg + ":" + stop.ElapsedMilliseconds);
                    }
                }
                break;
                }
            }
        }
Пример #4
0
        protected virtual void ReadResult(ReadBytes read)
        {
            var id = read.ReadInt64();

            if (read.ReadBoolean()) //is error
            {
                AsyncBackResult(new Result()
                {
                    Id       = id,
                    ErrorId  = (read.ReadInt32()),
                    ErrorMsg = read.ReadString()
                });
            }
            else
            {
                var           count = (read.ReadInt32());
                List <byte[]> args  = new List <byte[]>(count);
                for (int i = 0; i < count; i++)
                {
                    args.Add(read.ReadArray());
                }

                AsyncBackResult(new Result(args)
                {
                    Id = id
                });
            }
        }
Пример #5
0
        static void  DataOn(ReadBytes read, IFiberRw <string> fiberRw)
        {
            var cmd = read.ReadInt32();
            var p1  = read.ReadInt32();
            var p2  = read.ReadInt64();
            var p3  = read.ReadDouble();
            var p4  = read.ReadSingle();
            var p5  = read.ReadBoolean();
            var p6  = read.ReadBoolean();
            var p7  = read.ReadString();
            var p8  = read.ReadMemory();
            var p9  = read.ReadInt16();


            // var p10 = read.ReadObject<List<Guid>>();
            // read.Dispose();


            using (WriteBytes writeBytes = new WriteBytes(fiberRw))
            {
                writeBytes.WriteLen();
                writeBytes.Cmd(cmd);
                writeBytes.Write(p1);
                writeBytes.Write(p2);
                writeBytes.Write(p3);
                writeBytes.Write(p4);
                writeBytes.Write(p5);
                writeBytes.Write(p6);
                writeBytes.Write(p7);
                writeBytes.Write(p8);
                writeBytes.Write(p9);
                //writeBytes.Write(p10);
                writeBytes.Flush();
            }
        }
Пример #6
0
        static void DataOn(byte[] data, UserInfo userinfo)
        {
            //建立一个读取数据包的类 参数是数据包
            //这个类的功能很强大,可以读取数据包的数据,并可以把你发送过来的对象数据,转换对象引用

            ReadBytes read = new ReadBytes(data);

            int lengt; //数据包长度,用于验证数据包的完整性
            int cmd;   //数据包命令类型

            //注意这里一定要这样子写,这样子可以保证所有你要度的数据是完整的,如果读不出来 Raed方法会返回FALSE,从而避免了错误的数据导致崩溃
            if (read.ReadInt32(out lengt) && read.Length == lengt && read.ReadInt32(out cmd))
            {  //read.Read系列函数是不会产生异常的
                //根据命令读取数据包
                switch (cmd)
                {
                case 1000:
                    string msg = read.ReadString();
                    while (true)
                    {
                        BufferFormat buffer = new BufferFormat(1000);
                        buffer.AddItem(msg.ToString());
                        buffer.AddItem(new byte[8096]);
                        byte[] pdata = buffer.Finish();
                        server.Send(userinfo, pdata);
                    }

                    break;
                }
            }
        }
Пример #7
0
        static void Main(string[] args)
        {
            #region DES

            BufferFormat fan = new BufferFormat(1000, new FDataExtraHandle((o) =>
            {
                return DES.EncryptDES(o, DESkeys, "hello word");
            }));

            fan.AddItem(true);
            fan.AddItem("abc");
            fan.AddItem(123);

            byte[] data = fan.Finish();


            ReadBytes read = new ReadBytes(data, 4, -1, new RDataExtraHandle((o) =>
                {
                    return DES.DecryptDES(o, DESkeys, "hello word");
                }));

            int lengt;
            int cmd;
            bool var1;
            string var2;
            int var3;

            if (read.IsDataExtraSuccess &&
                read.ReadInt32(out lengt) &&
                lengt == read.Length &&
                read.ReadInt32(out cmd) &&
                read.ReadBoolean(out var1) &&
                read.ReadString(out var2) &&
                read.ReadInt32(out var3))
            {
                Console.WriteLine("This DES-> Length:{0} Cmd:{1} var1:{2} var2:{3} var3:{4}", lengt, cmd, var1, var2, var3);

            }
            #endregion

            //AES测试
            AEStest();

            //数据压缩
            Deflatetest();



            Console.ReadLine();
        }
Пример #8
0
        static void Main(string[] args)
        {
            #region DES

            BufferFormat fan = new BufferFormat(1000, new FDataExtraHandle((o) =>
            {
                return(DES.EncryptDES(o, DESkeys, "hello word"));
            }));

            fan.AddItem(true);
            fan.AddItem("abc");
            fan.AddItem(123);

            byte[] data = fan.Finish();


            ReadBytes read = new ReadBytes(data, 4, -1, new RDataExtraHandle((o) =>
            {
                return(DES.DecryptDES(o, DESkeys, "hello word"));
            }));

            int    lengt;
            int    cmd;
            bool   var1;
            string var2;
            int    var3;

            if (read.IsDataExtraSuccess &&
                read.ReadInt32(out lengt) &&
                lengt == read.Length &&
                read.ReadInt32(out cmd) &&
                read.ReadBoolean(out var1) &&
                read.ReadString(out var2) &&
                read.ReadInt32(out var3))
            {
                Console.WriteLine("This DES-> Length:{0} Cmd:{1} var1:{2} var2:{3} var3:{4}", lengt, cmd, var1, var2, var3);
            }
            #endregion

            //AES测试
            AEStest();

            //数据压缩
            Deflatetest();



            Console.ReadLine();
        }
Пример #9
0
        static void Deflatetest()
        {
            BufferFormat fan = new BufferFormat(1000, new FDataExtraHandle((o) =>
            {
                return(Deflate.Compress(o));
            }));

            fan.AddItem(true);
            fan.AddItem("abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc");
            fan.AddItem(123);

            byte[] data = fan.Finish();


            ReadBytes read = new ReadBytes(data, 4, -1, new RDataExtraHandle((o) =>
            {
                return(Deflate.Decompress(o));
            }));

            int    lengt;
            int    cmd;
            bool   var1;
            string var2;
            int    var3;

            if (read.IsDataExtraSuccess &&
                read.ReadInt32(out lengt) &&
                lengt == read.Length &&
                read.ReadInt32(out cmd) &&
                read.ReadBoolean(out var1) &&
                read.ReadString(out var2) &&
                read.ReadInt32(out var3))
            {
                Console.WriteLine("压缩前长度:{0}", read.Data.Length);
                Console.WriteLine("压缩后长度:{0}", read.Length);
                Console.WriteLine("This Deflate-> Length:{0} Cmd:{1} var1:{2} var2:{3} var3:{4}", lengt, cmd, var1, var2, var3);
            }
        }
Пример #10
0
        static void DataOn(byte[] data)
        {
            ReadBytes read = new ReadBytes(data);

            int lengt = read.ReadInt32();


            if (lengt == read.Length)
            {
                int cmd = read.ReadInt32();

                switch (cmd)
                {
                case 1000:
                {
                    string msg = read.ReadString();

                    Console.WriteLine(msg);
                }
                break;
                }
            }
        }
Пример #11
0
        static void AEStest()
        {
            BufferFormat fan = new BufferFormat(1000, new FDataExtraHandle((o) =>
            {
                return(AES.AESEncrypt(o, AESkeys, "hello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello word"));
            }));

            fan.AddItem(true);
            fan.AddItem("abc");
            fan.AddItem(123);

            byte[] data = fan.Finish();


            ReadBytes read = new ReadBytes(data, 4, -1, new RDataExtraHandle((o) =>
            {
                return(AES.AESDecrypt(o, AESkeys, "hello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello word"));
            }));

            int    lengt;
            int    cmd;
            bool   var1;
            string var2;
            int    var3;

            if (read.IsDataExtraSuccess &&
                read.ReadInt32(out lengt) &&
                lengt == read.Length &&
                read.ReadInt32(out cmd) &&
                read.ReadBoolean(out var1) &&
                read.ReadString(out var2) &&
                read.ReadInt32(out var3))
            {
                Console.WriteLine("This AES-> Length:{0} Cmd:{1} var1:{2} var2:{3} var3:{4}", lengt, cmd, var1, var2, var3);
            }
        }
Пример #12
0
        static void DataOn(byte[] data, SocketAsyncEventArgs e)
        {
            Console.WriteLine("ThreadId:" + System.Threading.Thread.CurrentThread.ManagedThreadId);
            try
            {
                //建立一个读取数据包的类 参数是数据包
                //这个类的功能很强大,可以读取数据包的数据,并可以把你发送过来的对象数据,转换对象引用

                ReadBytes read = new ReadBytes(data);

                int lengt; //数据包长度,用于验证数据包的完整性
                int cmd;   //数据包命令类型

                //注意这里一定要这样子写,这样子可以保证所有你要度的数据是完整的,如果读不出来 Raed方法会返回FALSE,从而避免了错误的数据导致崩溃
                if (read.ReadInt32(out lengt) && read.Length == lengt && read.ReadInt32(out cmd))
                {  //read.Read系列函数是不会产生异常的
                    //根据命令读取数据包
                    switch (cmd)
                    {
                    case 1000:
                    {
                        int    version = read.ReadInt32();
                        long   data1   = read.ReadInt64();
                        float  data2   = read.ReadFloat();
                        double db1     = read.ReadDouble();
                        bool   b1      = read.ReadBoolean();
                        bool   b2      = read.ReadBoolean();
                        short  s1      = read.ReadInt16();
                        byte   sb1     = read.ReadByte();
                        string str1    = read.ReadString();
                        string str2    = read.ReadString();
                        byte[] datax   = read.ReadByteArray();

                        TestData tm2 = read.ReadObject <TestData>();

                        Console.WriteLine("int:" + version);
                        Console.WriteLine("long:" + data1);
                        Console.WriteLine("float:" + data2);
                        Console.WriteLine("double:" + db1);
                        Console.WriteLine("bool TRUE:" + b1);
                        Console.WriteLine("bool False:" + b2);
                        Console.WriteLine("short:" + s1);
                        Console.WriteLine("byte:" + sb1);
                        Console.WriteLine("string:" + str1);
                        Console.WriteLine("string:" + str2);
                        Console.WriteLine("bytes lengt:" + datax.Length);

                        BufferFormat buffer = new BufferFormat(1000);
                        buffer.AddItem(version);
                        buffer.AddItem(data1);
                        buffer.AddItem(data2);
                        buffer.AddItem(db1);
                        buffer.AddItem(b1);
                        buffer.AddItem(b2);
                        buffer.AddItem(s1);
                        buffer.AddItem(sb1);
                        buffer.AddItem(str1);
                        buffer.AddItem(str2);
                        buffer.AddItem(datax);


                        TestData tmx = new TestData()
                        {
                            Id   = 1,
                            Data = new List <string>()
                            {
                                "123123", "32123123"
                            },
                            Data2 = new List <Test2>()
                            {
                                new Test2 {
                                    A = 1, B = 2
                                }, new Test2 {
                                    A = 3, B = 4
                                }
                            }
                        };

                        buffer.AddItem(tmx);

                        server.SendData(e.AcceptSocket, buffer.Finish());
                    }
                    break;
                    }
                }
            }
            catch (Exception er)
            {
                Console.WriteLine(er.ToString());
            }
        }
Пример #13
0
        static void DataOn(byte[] data, SocketAsyncEventArgs e)
        {
            try
            {
                //建立一个读取数据包的类 参数是数据包
                //这个类的功能很强大,可以读取数据包的数据,并可以把你发送过来的对象数据,转换对象引用
                ReadBytes read = new ReadBytes(data);

                int lengt; //数据包长度,用于验证数据包的完整性
                int cmd;   //数据包命令类型

                //注意这里一定要这样子写,这样子可以保证所有你要度的数据是完整的,如果读不出来 Raed方法会返回FALSE,从而避免了错误的数据导致崩溃
                if (read.ReadInt32(out lengt) && read.Length == lengt && read.ReadInt32(out cmd))
                {  //read.Read系列函数是不会产生异常的
                    //根据命令读取数据包
                    switch (cmd)
                    {
                    case 1000:
                        testClass.PPo temp;
                        if (read.ReadObject <testClass.PPo>(out temp))
                        {
                            if (temp != null)
                            {
                                Console.WriteLine("Id:{0}\r\n Mn:{1} \r\n Guid:{2} \r\n DataLength:{3} \r\n\r\n", temp.Id, temp.Message, temp.guid, read.Length);
                            }
                        }
                        break;

                    case 1001:
                    {
                        int    id;
                        string mn;
                        Guid   guid;

                        if (read.ReadInt32(out id) && read.ReadString(out mn) && read.ReadObject <Guid>(out guid))
                        {
                            Console.WriteLine("Id:{0}\r\n Mn:{1} \r\n Guid:{2} \r\n DataLength:{3} \r\n\r\n", id, mn, guid, read.Length);
                        }
                    }
                    break;

                    case 1002:
                    {
                        int    id;
                        string mn;
                        string guid;

                        if (read.ReadInt32(out id) && read.ReadString(out mn) && read.ReadString(out guid))
                        {
                            Console.WriteLine("Id:{0}\r\n Mn:{1} \r\n Guid:{2} \r\n DataLength:{3} \r\n\r\n", id, mn, guid, read.Length);
                        }
                    }
                    break;

                    case 1003:
                    {
                        server.SendData(e.AcceptSocket, data);
                    }
                    break;
                    }
                }
            }
            catch (Exception er)
            {
                Console.WriteLine(er.ToString());
            }
        }
Пример #14
0
        static void IpDataIn(byte[] data, SocketAsyncEventArgs socketAsync)
        {
            if (socketAsync.AcceptSocket != null)
            {
                ReadBytes read = new ReadBytes(data);

                int length;
                int Cmd;
                string key;
                int netport;
                if (read.ReadInt32(out length) && length == read.Length && read.ReadInt32(out Cmd) && read.ReadString(out key) && read.ReadInt32(out netport))
                {
                    if (Cmd == 100)
                    {
                        string ip = ((IPEndPoint)socketAsync.AcceptSocket.RemoteEndPoint).Address.ToString(); //获取外网IP地址
                        string port = ((IPEndPoint)socketAsync.AcceptSocket.RemoteEndPoint).Port.ToString(); //获取端口号

                        if (UserList.ContainsKey(key)) //检查是否包含此KEY
                        {
                            UserList[key].WANhost = ip;
                            UserList[key].CPort = port;
                            UserList[key].NatNetPort = netport - 1;

                            Console.WriteLine("注册端口号: 客户端:Key {0} 外网IP地址: {1} 下次开放端口: {2}", key, ip, netport);
                        }
                    }

                }
            }
        }
Пример #15
0
        static void AEStest()
        {
            BufferFormat fan = new BufferFormat(1000, new FDataExtraHandle((o) =>
            {
                return AES.AESEncrypt(o, AESkeys, "hello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello word");
            }));

            fan.AddItem(true);
            fan.AddItem("abc");
            fan.AddItem(123);

            byte[] data = fan.Finish();


            ReadBytes read = new ReadBytes(data, 4, -1, new RDataExtraHandle((o) =>
            {
                return AES.AESDecrypt(o, AESkeys, "hello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello wordhello word");
            }));

            int lengt;
            int cmd;
            bool var1;
            string var2;
            int var3;

            if (read.IsDataExtraSuccess&&
                read.ReadInt32(out lengt) &&
                lengt == read.Length &&
                read.ReadInt32(out cmd) &&
                read.ReadBoolean(out var1) &&
                read.ReadString(out var2) &&
                read.ReadInt32(out var3))
            {
                Console.WriteLine("This AES-> Length:{0} Cmd:{1} var1:{2} var2:{3} var3:{4}", lengt, cmd, var1, var2, var3);

            }
        }
Пример #16
0
        static void Deflatetest()
        {
            BufferFormat fan = new BufferFormat(1000, new FDataExtraHandle((o) =>
            {
                return Deflate.Compress(o);
            }));

            fan.AddItem(true);
            fan.AddItem("abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc");
            fan.AddItem(123);

            byte[] data = fan.Finish();


            ReadBytes read = new ReadBytes(data, 4, -1, new RDataExtraHandle((o) =>
            {
                 return Deflate.Decompress(o);
            }));

            int lengt;
            int cmd;
            bool var1;
            string var2;
            int var3;

            if (read.IsDataExtraSuccess &&
                read.ReadInt32(out lengt) &&
                lengt == read.Length &&
                read.ReadInt32(out cmd) &&
                read.ReadBoolean(out var1) &&
                read.ReadString(out var2) &&
                read.ReadInt32(out var3))
            {
                Console.WriteLine("压缩前长度:{0}", read.Data.Length);
                Console.WriteLine("压缩后长度:{0}", read.Length);
                Console.WriteLine("This Deflate-> Length:{0} Cmd:{1} var1:{2} var2:{3} var3:{4}", lengt, cmd, var1, var2, var3);

            }
        }
Пример #17
0
        static void DataOn(byte[] data, SocketAsyncEventArgs e)
        {
            try
            {
                //建立一个读取数据包的类 参数是数据包
                //这个类的功能很强大,可以读取数据包的数据,并可以把你发送过来的对象数据,转换对象引用
                ReadBytes read = new ReadBytes(data);

                int lengt; //数据包长度,用于验证数据包的完整性
                int cmd; //数据包命令类型

                //注意这里一定要这样子写,这样子可以保证所有你要度的数据是完整的,如果读不出来 Raed方法会返回FALSE,从而避免了错误的数据导致崩溃
                if (read.ReadInt32(out lengt) && read.Length == lengt && read.ReadInt32(out cmd)) 
                {  //read.Read系列函数是不会产生异常的

                    //根据命令读取数据包
                    switch (cmd) 
                    {
                       
                        case 1000:
                            testClass.PPo temp;
                            if (read.ReadObject<testClass.PPo>(out temp)) 
                            {
                               
                                if (temp != null)
                                {
                                    Console.WriteLine("Id:{0}\r\n Mn:{1} \r\n Guid:{2} \r\n DataLength:{3} \r\n\r\n", temp.Id, temp.Message, temp.guid, read.Length);
                                  
                                }
                            }
                            break;
                        case 1001:
                            {
                                int id;
                                string mn;
                                Guid guid;

                                if (read.ReadInt32(out id) && read.ReadString(out mn) && read.ReadObject<Guid>(out guid))
                                {

                                    Console.WriteLine("Id:{0}\r\n Mn:{1} \r\n Guid:{2} \r\n DataLength:{3} \r\n\r\n", id, mn, guid, read.Length);
                                  
                                }

                            }
                            break;
                        case 1002:
                            {
                                int id;
                                string mn;
                                string guid;

                                if (read.ReadInt32(out id) && read.ReadString(out mn) && read.ReadString(out guid))
                                {

                                    Console.WriteLine("Id:{0}\r\n Mn:{1} \r\n Guid:{2} \r\n DataLength:{3} \r\n\r\n", id, mn, guid, read.Length);

                                }

                            }
                            break;
                        case 1003:
                            {
                                server.SendData(e.AcceptSocket, data);

                            }
                            break;


                    }


                }
            }
            catch (Exception er)
            {
                Console.WriteLine(er.ToString());
            }
        }
Пример #18
0
        private async void SocketClient_BinaryInput(ISocketClient client, ISockAsyncEventAsClient socketAsync)
        {
            var fiberRw = await GetFiberRw(socketAsync);

            try
            {
                if (fiberRw == null)
                {
                    client.SetConnected(false, "ssl error");
                    return;
                }

                IWrite = fiberRw;

                if (!isConnect)
                {
                    await SendVerify(); //发送KEY和sessionid验证

                    using ReadBytes read = new ReadBytes(fiberRw);
                    await read.Init();

                    switch (read.ReadInt32())
                    {
                    case 1000:     //key check
                    {
                        var iserror = read.ReadBoolean();

                        if (!iserror)
                        {
                            Log.Trace(read.ReadString());

                            if (read.Memory.Length >= 1)
                            {
                                if (read.ReadByte() == 1)
                                {
                                    Mode = 1;
                                }
                            }

                            isConnect = true;
                            client.SetConnected();
                            await GetSessionId();
                            await ReadIng(fiberRw);
                        }
                        else
                        {
                            var msg = read.ReadString();
                            Log.Info(msg);
                            client.SetConnected(false, msg);
                        }
                    }
                    break;
                    }
                }

                client.ShutdownBoth();
            }
            catch (Exception er)
            {
                if (!client.IsConnect)
                {
                    client.SetConnected(false, er.Message);
                }
                else
                {
                    Log.Error(er);
                    client.ShutdownBoth();
                }
            }
        }
Пример #19
0
        static void IpDataIn(byte[] data, SocketAsyncEventArgs socketAsync)
        {
            if (socketAsync.AcceptSocket != null)
            {
                ReadBytes read = new ReadBytes(data);

                int    length;
                int    Cmd;
                string key;
                int    netport;
                if (read.ReadInt32(out length) && length == read.Length && read.ReadInt32(out Cmd) && read.ReadString(out key) && read.ReadInt32(out netport))
                {
                    if (Cmd == 100)
                    {
                        string ip   = ((IPEndPoint)socketAsync.AcceptSocket.RemoteEndPoint).Address.ToString(); //获取外网IP地址
                        string port = ((IPEndPoint)socketAsync.AcceptSocket.RemoteEndPoint).Port.ToString();    //获取端口号

                        if (UserList.ContainsKey(key))                                                          //检查是否包含此KEY
                        {
                            UserList[key].WANhost    = ip;
                            UserList[key].CPort      = port;
                            UserList[key].NatNetPort = netport - 1;

                            Console.WriteLine("注册端口号: 客户端:Key {0} 外网IP地址: {1} 下次开放端口: {2}", key, ip, netport);
                        }
                    }
                }
            }
        }
Пример #20
0
        static void DataOn(byte[] data, UserInfo userinfo)
        {

            //建立一个读取数据包的类 参数是数据包
            //这个类的功能很强大,可以读取数据包的数据,并可以把你发送过来的对象数据,转换对象引用

            ReadBytes read = new ReadBytes(data);

            int lengt; //数据包长度,用于验证数据包的完整性
            int cmd; //数据包命令类型

            //注意这里一定要这样子写,这样子可以保证所有你要度的数据是完整的,如果读不出来 Raed方法会返回FALSE,从而避免了错误的数据导致崩溃
            if (read.ReadInt32(out lengt) && read.Length == lengt && read.ReadInt32(out cmd))
            {  //read.Read系列函数是不会产生异常的

                //根据命令读取数据包
                switch (cmd)
                {
                    case 1000:
                        string msg = read.ReadString();
                        while (true)
                        {
                           
                            BufferFormat buffer = new BufferFormat(1000);
                            buffer.AddItem(msg.ToString());
                            buffer.AddItem(new byte[8096]);
                            byte[] pdata = buffer.Finish();
                            server.Send(userinfo, pdata);
                        }

                    break;
                        

                }

            }


        }