/// <summary> /// 获取SYNC交互状态,错误时读取错误信息 /// </summary> /// <param name="socket"></param> /// <param name="length"></param> /// <param name="success"></param> /// <param name="fail"></param> /// <returns></returns> public static AdbResult GetState(Socket socket, out int length, string success = "DATA", string fail = "FAIL") { var res = new AdbResult { // 读取状态代码 State = Read(socket, 4, Encoding.ASCII) }; length = -1; // 读取长度 var bytes = new byte[4]; var len = Read(socket, bytes, 4); if (len != 4) { return(res); } var slen = BitConverter.ToInt32(bytes, 0); length = slen; // 判断响应状态是否为成功 res.Okay = string.Equals(res.State, success); if (string.Equals(res.State, fail)) { res.Data = Read(socket, slen, Encoding.UTF8); } return(res); }
/// <summary> /// 获取服务端响应结果 /// </summary> /// <param name="socket"></param> /// <param name="iffial"></param> /// <param name="state"></param> /// <returns></returns> public static AdbResult GetResult(Socket socket, bool iffial = false, bool state = true) { var res = new AdbResult(); // 读取状态 if (state) { res.State = Read(socket, 4, Encoding.ASCII); res.Okay = string.Equals(res.State, "OKAY"); // 判断是否为错误时才读取消息 if (iffial && res.Okay) { return(res); } } // 读取消息长度,读取失败或长度为0时返回 try { var bytes = Read(socket, 4, Encoding.ASCII); // 不读取状态字符串时,根据数据长度设置状态 if (!state && bytes.Length == 4) { res.Okay = true; } var len = Convert.ToInt32(bytes, 16); if (len <= 0) { return(res); } // 根据长度读取消息 res.Data = Read(socket, len, Encoding.ASCII); } catch (Exception) { // ignored } return(res); }