/*-----------------------------------------连接部分函数---------------------------------------*/ //连接服务器 public bool NetConnect(string ip, int port) { if (!isConnected) //若当前还未连接, 则进行连接 { try { client = new TcpClientWithTimeout(ip, port, 3000).Connect(); //带超时检测的连接 //client = new TcpClient(ip, port); networkStream = client.GetStream(); br = new BinaryReader(networkStream); bw = new BinaryWriter(networkStream); isConnected = true; //标志已连接上服务器 //写入网络连接记录到日志文件中 worklog.LogQueue_Enqueue(LogCommand.getNetRecord(NetRecordType.TcpConnect, "1")); Console.WriteLine("连接成功"); return(true); } catch (Exception ex) { //写入网络连接记录到日志文件中 worklog.LogQueue_Enqueue(LogCommand.getNetRecord(NetRecordType.TcpConnect, "2")); Console.WriteLine("LinkThread:" + ex.Message); log.Info(AppUtil.getExceptionInfo(ex)); isConnected = false; } } Thread.Sleep(10); return(false); }
//HTTP发送数据包的函数, 发送一个数据包 public void DataPackSendViaHttp(NetPacket packetSend) { if (packetSend != null) { byte[] sendBuf = new byte[packetSend.DataLength + 6]; sendBuf[0] = 0x5A; //起始符0 sendBuf[1] = 0xA5; //起始符1 sendBuf[2] = packetSend.PacketType; //报类型 sendBuf[3] = packetSend.DataLength_HighByte; //长度高字节 sendBuf[4] = packetSend.DataLength_LowByte; //长度低字节 for (int i = 0; i < packetSend.DataLength; i++) //数据域 { sendBuf[5 + i] = packetSend.datafield[i]; } //校验字节 if (packetSend.DataLength != 0) { sendBuf[packetSend.DataLength + 5] = AppUtil.GetChecksum(new byte[4] { packetSend.PacketType, packetSend.DataLength_HighByte, packetSend.DataLength_LowByte, AppUtil.GetChecksum(packetSend.datafield, 0, packetSend.DataLength) }, 0, 4); } else { sendBuf[packetSend.DataLength + 5] = AppUtil.GetChecksum(new byte[3] { packetSend.PacketType, packetSend.DataLength_HighByte, packetSend.DataLength_LowByte }, 0, 3); } //发送出去 try { //设置各个访问页面 string LoginURL = "http://" + SysConfig.Setting.serverIP + "/login"; string UploadURL = "http://" + SysConfig.Setting.serverIP + "/event/uploadData"; //http 发送 if (HttpHelper.UploadData(UploadURL, BitConverter.ToString(sendBuf)) == 1)//返回1 重新登陆 { int LoginRes = HttpHelper.LoginServer(LoginURL, SysConfig.Setting.accessAccount, SysConfig.Setting.accessPassword); } //写入网络发送记录到日志文件中 worklog.LogQueue_Enqueue(LogCommand.getNetRecord(NetRecordType.NetSendViaHttp, packetSend)); } catch (Exception ex) //发送数据异常, 判断是与主机断开连接 { Console.WriteLine(ex.Message); log.Info(AppUtil.getExceptionInfo(ex)); isConnected = false; } } }
//发送数据包的函数, 发送一个数据包 public void DataPackSend(NetPacket packetSend) { if (packetSend != null) { byte[] sendBuf = new byte[packetSend.DataLength + 6]; sendBuf[0] = 0x5A; //起始符0 sendBuf[1] = 0xA5; //起始符1 sendBuf[2] = packetSend.PacketType; //报类型 sendBuf[3] = packetSend.DataLength_HighByte; //长度高字节 sendBuf[4] = packetSend.DataLength_LowByte; //长度低字节 for (int i = 0; i < packetSend.DataLength; i++) //数据域 { sendBuf[5 + i] = packetSend.datafield[i]; } //校验字节 if (packetSend.DataLength != 0) { sendBuf[packetSend.DataLength + 5] = AppUtil.GetChecksum(new byte[4] { packetSend.PacketType, packetSend.DataLength_HighByte, packetSend.DataLength_LowByte, AppUtil.GetChecksum(packetSend.datafield, 0, packetSend.DataLength) }, 0, 4); } else { sendBuf[packetSend.DataLength + 5] = AppUtil.GetChecksum(new byte[3] { packetSend.PacketType, packetSend.DataLength_HighByte, packetSend.DataLength_LowByte }, 0, 3); } //发送出去 if (isConnected) { try { bw.Write(sendBuf, 0, sendBuf.Length); //写入网络发送记录到日志文件中 worklog.LogQueue_Enqueue(LogCommand.getNetRecord(NetRecordType.NetSend, packetSend)); LatestSendTime = DateTime.Now; //更新最近一次发送数据包的时间 } catch (Exception ex) //发送数据异常, 判断是与主机断开连接 { Console.WriteLine(ex.Message); log.Info(AppUtil.getExceptionInfo(ex)); isConnected = false; netDelegate.TriggerEvent(null); //网络意外断开调用委托 } } } }