Socket通信相关知识点总结

Socket通信相关知识点总结

 

目录

Socket通信相关知识点总结

优秀博客记录

Int 和 byte 转换

Socket

定时器

Protobuf

项目socket通信逻辑整理


 

优秀博客记录

 

byte[i] & 0xFF原因(byte为什么要与上0xff?)

https://www.cnblogs.com/originate918/p/6378005.html  

https://www.cnblogs.com/MCSFX/p/11027160.html  

 

protobuf,json,xml,binary,Thrift之间的对比

http://blog.sina.com.cn/s/blog_406127500102uy6e.html

 

https://blog.csdn.net/qq_30270931/article/details/80483124

Socket通信原理简单理解

 

socket编程入门:玩转socket通信技术

http://c.biancheng.net/socket/ 

 

Int 和 byte 转换

  /**

     * int转byte[]

     * 该方法将一个int类型的数据转换为byte[]形式,因为int为32bit,而byte为8bit所以在进行类型转换时,知会获取低8位,

     * 丢弃高24位。通过位移的方式,将32bit的数据转换成4个8bit的数据。注意 &0xff,在这当中,&0xff简单理解为一把剪刀,

     * 将想要获取的8位数据截取出来。

     * @param i 一个int数字

     * @return byte[]

     */

        public static byte[] int2ByteArray(int i)

        {

            byte[] result = new byte[4];

            result[0] = (byte)((i >> 24) & 0xFF);

            result[1] = (byte)((i >> 16) & 0xFF);

            result[2] = (byte)((i >> 8) & 0xFF);

            result[3] = (byte)(i & 0xFF);

            return result;

        }

        /**

         * byte[]转int

         * 利用int2ByteArray方法,将一个int转为byte[],但在解析时,需要将数据还原。同样使用移位的方式,将适当的位数进行还原,

         * 0xFF为16进制的数据,所以在其后每加上一位,就相当于二进制加上4位。同时,使用|=号拼接数据,将其还原成最终的int数据

         * @param bytes byte类型数组

         * @return int数字

         */

        public static int bytes2Int(byte[] bytes)

        {

            int num = bytes[3] & 0xFF;

            num |= ((bytes[2] << 8) & 0xFF00);

            num |= ((bytes[1] << 16) & 0xFF0000);

            num |= ((bytes[0] << 24) & 0xFF0000);

            return num;

        }

 

Socket

 

socket = new Socket(AddressFamily.InterNetworkSocketType.StreamProtocolType.Tcp);

socket.Connect(IPAddress.Parse(host), port);

socket.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(sendCallback), socket);

socket.BeginReceive(stateObject.buffer, 0, stateObject.buffer.LengthSocketFlags.None, new AsyncCallback(ReceiveCallback), stateObject);

 

public void Disconnect()

   {

         try

         {

             if (socket.Connected)

             {

                 socket.Shutdown(SocketShutdown.Both);

             }

             socket.Close();

         }

    }

 

 

定时器

this.timer = new Timer();

timer.Interval = 30;

timer.Elapsed += new ElapsedEventHandler(sendHeartBeat);

timer.Enabled = true;

 

public void stop()

{

    if(this.timer != null) 

     {

         this.timer.Stop();

         this.timer.Dispose();

         this.timer = null;    

     }

}

 

 

Protobuf

反序列化

     var cis = new pb.CodedInputStream(buffer, offset, buffer.Length - offset);

     T t = new T();

     t.MergeFrom(cis);

 

序列化

    MemoryStream m = new MemoryStream();

    var cos = new pb.CodedOutputStream(m);

    msg.WriteTo ( cos );

    cos.Flush ( );

    return m.ToArray ( );//byte[]

 

 

项目socket通信逻辑整理

 

Socket通信相关知识点总结

 

 

上一篇:数据结构Part5 图


下一篇:MiniGUI RGB565大小端显示问题