private string SendRequest(RequestCommand request, out string statusCode, out string errMsg) { request.timeoutSeconds = iotParam.timeoutSeconds; //追加超时参数 SuperSocketTCPClientOper tcpClientOper = new SuperSocketTCPClientOper(iotParam.commandIP, iotParam.port); tcpClientOper.DataReceived += WriteResponseReceiveHandle; if (!tcpClientOper.Connect(out string clienName, out errMsg)) { errMsg = "连接物联网服务失败,请检查服务服务器是否打开:" + errMsg; statusCode = "410"; return(""); } string jsonStr = ByteUtil.AddLineBreak(ByteUtil.ToSerializeObject(request)); // 实现内部协议 GUID-key,T-body string key = Guid.NewGuid().ToString(); string data = key + " " + jsonStr; byte[] sendBuffer = ByteUtil.ToSerializeBuffer(data); tcpClientOper.SendData(clienName, sendBuffer, out errMsg); if (!string.IsNullOrWhiteSpace(errMsg)) { errMsg = "请求物联网服务数据包发送失败:" + errMsg; statusCode = "412"; return(""); } // 主线程等待设定秒 不返回认定为超时 SpinWait wait = new SpinWait(); DateTime dt = DateTime.Now; while ((DateTime.Now - dt) < TimeSpan.FromSeconds(iotParam.timeoutSeconds + 4)) { if (this.responseFlag) { break; } wait.SpinOnce(); } if (this.responseFlag) // 服务成功返回 { try { ResponseCommand response = ByteUtil.ToDeserializeObject <ResponseCommand>(reciveBuffer); statusCode = response.statusCode; errMsg = response.errMsg; return(response.info); } catch (Exception e) { statusCode = "413"; errMsg = "物联网服务返回参数反序列化失败:" + e.Message; return(""); } } else { statusCode = "414"; errMsg = "服务超时未返回"; return(""); } }