首页 > 代码库 > 底层通信小结

底层通信小结

  1. cmd的len就是真实的len,而不需要/2了;
  2. timer的定时任务,start并不执行,只有在第一个interval时间过后才会第一次执行;
  3. paddLeft的使用:"Jim",使用padLeft(5,‘0‘)之后,就是00Jim;
    1. bit(位)是传输单位,二进制的0、1;Byte(字节)是最小的数据存储单位;1Byte = 8Bit;一个英文字母、数字、半角标点都是1Byte(字节);在传递命令中,路径就是
      1)Encoding.UTF8.GetBytes(cuseeion),将文字转换为字节;
      2)就每一个字节转换为16进制
      StringBuilder sb = new StringBuilder(data.Length * 3);

foreach (byte b in data)

????sb.Append(Convert.ToString(b, 16).PadLeft(2, ‘0‘));

return sb.ToString().ToUpper();

3)将

  1. 使用ByteArrayToHexString(bb.ToByteArray())的方法,可以获得最终传输到命令服务器的内容(00002715XXX);对于协议中描述的"FFFF0A000000000001014D025B"而言,其实已经是经过16进制编码的,所以对于把这部分压入到ByteBuffer,直接用HexStringToByteArray(" FFFF0A000000000001014D025B")即可;
  2. 将字符串转换为byte[]其实是对字符串的char进行ASCII编码(基于10进制编码),在ByteArrayToHexString中因为采用了16进制进行编码,这就有问题:两位的十进制字节可能一位16进制字节即可,于是采用PadLeft进行补位处理,这也是我们看到的在协议中定义的比如MAC地址32位(字节,或者说字母数字),但是其实是64位长,就是在转成byte[]转16进制的时候,固定做两位长度。
  3. Socket对象中的SendTimeout和ReceiveTimeout默认值是0,代表无线等待;有的时候我们可以通过设定超时时间来判定操作的成功与否