- cmd的len就是真实的len,而不需要/2了;
- timer的定时任务,start并不执行,只有在第一个interval时间过后才会第一次执行;
paddLeft的使用:"Jim",使用padLeft(5,‘0‘)之后,就是00Jim;
- 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)将
- 使用ByteArrayToHexString(bb.ToByteArray())的方法,可以获得最终传输到命令服务器的内容(00002715XXX);对于协议中描述的"FFFF0A000000000001014D025B"而言,其实已经是经过16进制编码的,所以对于把这部分压入到ByteBuffer,直接用HexStringToByteArray(" FFFF0A000000000001014D025B")即可;
- 将字符串转换为byte[]其实是对字符串的char进行ASCII编码(基于10进制编码),在ByteArrayToHexString中因为采用了16进制进行编码,这就有问题:两位的十进制字节可能一位16进制字节即可,于是采用PadLeft进行补位处理,这也是我们看到的在协议中定义的比如MAC地址32位(字节,或者说字母数字),但是其实是64位长,就是在转成byte[]转16进制的时候,固定做两位长度。
- Socket对象中的SendTimeout和ReceiveTimeout默认值是0,代表无线等待;有的时候我们可以通过设定超时时间来判定操作的成功与否
底层通信小结,布布扣,bubuko.com
底层通信小结
原文:http://www.cnblogs.com/xiashiwendao/p/3855386.html