/// <summary> /// 一对一发送命令/数据 /// </summary> /// <param name="nDestId"></param>命令/数据目的ID /// <param name="nCmd"></param>命令 /// <param name="rData"></param>数据 /// <returns></returns> public bool SyncRequest(int nDestId, int nCmd, byte[] Data) { bool boRC = false;//运行正常与否标志位 Socket socket; if (nCmd != (int)HC_FSM_COMMAND_TYPE.HC_CMD_DISPLAY_OFF && nCmd != (int)HC_FSM_COMMAND_TYPE.HC_CMD_DISPLAY_ON && !SubsysIsConnected(Commonfunction.GetSubsysIndex(nDestId))) { Trace.WriteLine(string.Format("当前子系统不可用,函数SyncRequest nDestId:{0},nCmd={1}", nDestId, nCmd)); #if REALEASE GlobalDataInterface.WriteErrorInfo(string.Format("当前子系统不可用,函数SyncRequest nDestId:{0},nCmd={1}", nDestId, nCmd)); #endif return(false); } //C++: AfxGetApp()->BeginWaitCursor(); string strIP = ""; int nSubsysId = Commonfunction.GetSubSysID(nDestId); int nPortNum = ConstPreDefine.FSM_PORT_NUM; if (nCmd >= 0x2000 && nCmd < 0x3000) //判断为HC->IPM的发送命令 { nPortNum = ConstPreDefine.IPM_PORT_NUM; nSubsysId = Commonfunction.GetIPMID(nDestId); } string strTemp = ConstPreDefine.LC_IP_ADDR_TEMPLATE; strIP = strTemp + nSubsysId;//得到发送的IP地址 try { Lock(1000); //资源加锁 socket = CreateSocket(); //创建socket socket.SendBufferSize = 0; //网络发送缓冲区为0 if (nCmd == (int)HC_FSM_COMMAND_TYPE.HC_CMD_DISPLAY_ON) { boRC = ConnectoServer(socket, strIP, nPortNum, true);//初始连接 } else { boRC = ConnectoServer(socket, strIP, nPortNum, false);//运行状态下连接 } if (!boRC) { Trace.WriteLine("网络连接失败!"); #if REALEASE GlobalDataInterface.WriteErrorInfo(string.Format("网络连接失败!")); #endif UnLock(); socket.Close(); return(boRC); } SendCMD cmd = new SendCMD(); cmd.SYNC = 0x434e5953; cmd.nSrcId = ConstPreDefine.HC_ID; //发送源ID cmd.nDestId = nDestId; //发送目的ID cmd.nCmd = nCmd; int nStructLen = 4 * sizeof(int); byte[] bytes = new byte[nStructLen]; bytes = Commonfunction.StructToBytes(cmd); //将结构体转化为byte数组 boRC = Send(socket, bytes); //发送命令头 if (!boRC) { Trace.WriteLine("网络发送命令头错误!"); #if REALEASE GlobalDataInterface.WriteErrorInfo(string.Format("网络发送命令头错误!")); #endif goto leave; } int A = BitConverter.ToInt32(bytes, 12); if (Data != null) { boRC = Send(socket, Data);//发送数据 if (!boRC) { Trace.WriteLine("网络发送数据错误!"); #if REALEASE GlobalDataInterface.WriteErrorInfo(string.Format("网络发送数据错误!")); #endif goto leave; } } leave: DestroySocket(socket, boRC); UnLock(); //AfxGetApp()->EndWaitCursor(); if (boRC) { Trace.WriteLine(string.Format("成功:函数SyncRequest nDestId:{0},nCmd={1},数据长度={2}", nDestId, nCmd, Data.Length)); #if REALEASE GlobalDataInterface.WriteErrorInfo(string.Format("成功:函数SyncRequest nDestId:{0},nCmd={1},数据长度={2}", nDestId, nCmd, Data.Length)); #endif } else { if (nCmd == (int)HC_FSM_COMMAND_TYPE.HC_CMD_DISPLAY_ON) { m_IsConnected[Commonfunction.GetSubsysIndex(nDestId)] = false; } Trace.WriteLine(string.Format("失败:函数SyncRequest nDestId:{0},nCmd={1},数据长度={2}", nDestId, nCmd, Data.Length)); #if REALEASE GlobalDataInterface.WriteErrorInfo(string.Format("失败:函数SyncRequest nDestId:{0},nCmd={1},数据长度={2}", nDestId, nCmd, Data.Length)); #endif } } catch (Exception e) { Trace.WriteLine("失败:函数SyncRequest" + e); #if REALEASE GlobalDataInterface.WriteErrorInfo("失败:函数SyncRequest" + e); #endif return(false); } return(boRC); }