Example #1
0
        /*-----------------------------------------连接部分函数---------------------------------------*/
        //连接服务器
        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);
        }
Example #2
0
        //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;
                }
            }
        }
Example #3
0
        //发送数据包的函数, 发送一个数据包
        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);                                 //网络意外断开调用委托
                    }
                }
            }
        }