Exemple #1
0
        static void Main(string[] args)
        {
            client              = new SocketClient();
            client.BinaryInput  = new ClientBinaryInputHandler(ClientBinaryInputHandler);   //设置数据包处理回调方法
            client.MessageInput = new ClientMessageInputHandler(ClientMessageInputHandler); //断开处理
            if (client.Connect(Config.Default.IP, Config.Default.Port))                     //连接到服务器
            {
                client.StartRead();                                                         //开始监听读取
                while (true)
                {
                    string mess = Console.ReadLine();
                    if (mess.Length == 0)
                    {
                        continue;
                    }

                    Console.WriteLine("Send:" + mess);
                    byte[] messdata = Buffers.GetSocketBytes(mess);
                    messdata = Buffers.MergeBytes(Buffers.GetSocketBytes(messdata.Length), messdata);
                    client.SendData(messdata);
                }
            }
            else
            {
                Console.WriteLine("无法连接服务器");
            }
        }
        public int GetDataLen(byte[] data, int index)
        {
            var len = BitConverter.ToInt32(data, index);
            var bys = BitConverter.GetBytes(len);

            bys = Buffers.ReverseBytes(bys);
            len = BitConverter.ToInt32(bys, 0); //获取到包头多少个字节
            return(len);
        }
        void DataMM(byte[] data)
        {
            var index = 0;

            if (iLen > 0)
            {
                if (iLen <= data.Length)
                {
                    var tmp = new byte[iLen];
                    Array.Copy(data, 0, tmp, 0, tmp.Length);
                    buf = Buffers.MergeBytes(buf, tmp);
                    this.BinaryInput(buf);
                    buf   = null;
                    index = iLen;
                }
                else
                {
                    buf   = Buffers.MergeBytes(buf, data);
                    iLen -= data.Length;
                    return;
                }
            }

            if (bu != null)
            {
                data = Buffers.MergeBytes(bu, data);
                bu   = null;
            }

            while (true)
            {
                if (data.Length - index < 4)
                {
                    bu = new byte[data.Length - index];
                    Array.Copy(data, index, bu, 0, bu.Length);
                    iLen = 0;
                    break;
                }

                iLen = GetDataLen(data, index);
                if (index + iLen + 4 > data.Length)
                {
                    //包不完整
                    buf = new byte[data.Length - index - 4];
                    Array.Copy(data, index + 4, buf, 0, buf.Length);
                    iLen -= buf.Length;
                    break;
                }
                else if (index + iLen + 4 == data.Length)
                {
                    buf = new byte[iLen];
                    Array.Copy(data, index + 4, buf, 0, buf.Length);
                    //回调函数
                    this.BinaryInput(buf);
                    buf  = null;
                    iLen = 0;
                    break;
                }
                else
                {
                    buf = new byte[iLen];
                    Array.Copy(data, index + 4, buf, 0, buf.Length);
                    //回调函数
                    this.BinaryInput(buf);
                    buf    = null;
                    index += iLen + 4;
                }
            }
        }