花了几天时间终于调试通了,中间走了不省弯路,对协议中一些字段的理解有些偏差。协议中“校验和”字段耗费时间最长,校验和字段计算方法描述为将“消息头+会话头+事务头+操作消息”按32位异或,最后结果取反,表示成16进制,长度为8字节。这个描述刚看上去,确实头疼,想的很复杂,但最后正确的理解却很简单。32位即4个字节,将 消息头+会话头+事务头+操作消息拼成一个byte[],然后每4个字节为一组,一组一组的进行异或,即前两组异或结果与后一组异或,最终得出结果,再取反。下面为
/**
* 计算检验和:将消息头+会话头+事务头+操作消息按32位异或,即4字节一组,依次异或,最后结果取反。转为16进制即为检验和。
* @param str
* @return
*/
public
String computeCheckSum(
byte
[] arr)
{
System.out.println("checksum string=" + new String(arr));
byte[] res = new byte[4];







