/// <summary>
 /// 得到客户端缓存(同步)
 /// </summary>
 public void GetCahceSyn(string userid, CallBackEvent callback)
 {
     try
     {
         TcpCli    client = new TcpCli(ShareData.LocalIp, ShareData.LocalPort);
         MsgStruts msg    = new MsgStruts();
         msg.command      = msgCommand.GetCache;
         msg.msgtype      = msgType.SendText;
         msg.msgsendstate = msgSendState.single;
         msg.Data         = _coder.GetEncodingBytes(userid);
         if (SystemConfig.GetCacheWaitSleep)
         {//socket缓冲区8192问题没有解决时使用延时加载形式去加载缓存数据
             msg = client.SendAndBack(msg);
             callback(msg);
         }
         else
         {
             client.AsyncSendWithReceiverData(msg, callback);
         }
     }
     catch (Exception ex)
     {
         ex.ToString().ErrorLogger();
         ShareData.Log.Info(ex);
         callback(null);
     }
     //return ClientCache.SetCache(msgb.Data);
 }
Ejemplo n.º 2
0
        public void EventDisConnectedServer(object sender, NetEventArgs e)
        {
            RunFlag = false;
            TcpCli tc = (TcpCli)sender;

            tc.Connect();
        }
        /// <summary>
        /// 得到网络配置值并验证该用户名密码(同步方式)
        /// </summary>
        public string  GetLoginS(string uid, string upsw, string uip)
        {
            //网络配置值初始化
            string[] servinfo = DataConfig.GetServerInfo();
            string   StrIp    = servinfo[0];
            string   StrPort  = servinfo[1];
            int      port     = int.Parse(StrPort);

            ShareData.LocalIp   = StrIp;
            ShareData.LocalPort = port;

            TcpCli    client = new TcpCli(ShareData.LocalIp, ShareData.LocalPort);
            MsgStruts msg    = new MsgStruts();

            msg.command      = msgCommand.GetLogin;
            msg.msgtype      = msgType.SendText;
            msg.msgsendstate = msgSendState.single;
            string msgStr = uid + "|" + upsw + "|" + uip;

            msg.Data = _coder.GetEncodingBytes(msgStr);
            client.ReceiverDataComplate = AsyncCallback;
            MsgStruts msgb     = client.SendAndBack(msg);
            string    loginStr = _coder.GetEncodingString(msgb.Data, msgb.Data.Length);

            return(loginStr);
        }
Ejemplo n.º 4
0
        private static void InitScoketClient()
        {
            foreach (DataRow dr in dtRDSList.Rows)
            {
                RDSConfigModel rm  = new RDSConfigModel();
                string         sfs = dr["SysFlag"].ToString();
                rm.SysFlag = sfs.Split(',');
                initCarOnlineStatusMem(rm.SysFlag);
                string mincid = dr["MinCID"].ToString();
                string maxcid = dr["MaxCID"].ToString();
                long   MinCID = 0, MaxCID = 0;
                long.TryParse(mincid, out MinCID);
                long.TryParse(maxcid, out MaxCID);
                rm.MinCID  = MinCID;
                rm.MaxCID  = MaxCID;
                rm.ID      = dr["ID"].ToString();
                rm.IP      = dr["IP"].ToString();
                rm.Port    = dr["Port"].ToString();
                rm.RDSMark = dr["RDSMark"].ToString();
                rm.WCFUrl  = dr["WCFUrl"].ToString();
                TcpCli tc = new TcpCli(rm.IP, int.Parse(rm.Port));
                tc.ConnectedServer    += rm.EventConnectedServer;
                tc.DisConnectedServer += rm.EventDisConnectedServer;
                tc.ReceivedDatagram   += new NetEvent(tc_ReceivedDatagram);
                try
                {
                    tc.Connect();
                    Thread.Sleep(4000);
                    if (tc.IsConnected)
                    {
                        rm.RunFlag = true;
                    }
                    else
                    {
                        rm.RunFlag = false;
                    }
                }
                catch
                {
                    rm.RunFlag = false;
                }


                rm.TcpClient = tc;

                RDSClient.Add(rm.ID, rm);

                if (rm.RunFlag)
                {
                    LogHelper.WriteInfo("初始化与RDS服务建立连接完成(" + rm.RDSMark + ")");
                }
                else
                {
                    LogHelper.WriteInfo("初始化与RDS服务建立连接失败(" + rm.RDSMark + "),等待维护线程重连");
                }
            }
        }
Ejemplo n.º 5
0
 public SocketClient()
 {
     Console.WriteLine("正在尝试连接到服务器。");
     cli = new TcpCli(new Coder(Coder.EncodingMothord.UTF8));
     cli.ReceivedDatagram   += new NetEvent(cli_ReceivedDatagram);
     cli.ConnectedServer    += new NetEvent(cli_ConnectedServer);
     cli.DisConnectedServer += new NetEvent(cli_DisConnectedServer);
     cli.ConnectFailed      += cli_ConnectFailed;
     cli.Resovlver           = new DatagramResolver(RESOLVER);
 }
Ejemplo n.º 6
0
 private static void Manager()
 {
     while (true)
     {
         Thread.Sleep(10000);
         //检查所有实时信息服务socket连接
         foreach (RDSConfigModel rm in RDSClient.Values)
         {
             TcpCli tc = rm.TcpClient;
             try
             {
                 if (tc.IsConnected)
                 {
                     tc.SendData(new byte[] { });
                 }
                 else
                 {
                     LogHelper.WriteInfo("RDS服务(" + rm.RDSMark + "),连接中断准备重连!" + tc.IP + ":" + tc.Port);
                     tc.Connect();
                     if (tc.IsConnected)
                     {
                         LogHelper.WriteInfo("RDS服务(" + rm.RDSMark + "),重连成功!" + tc.IP + ":" + tc.Port);
                     }
                     else
                     {
                         LogHelper.WriteInfo("RDS服务(" + rm.RDSMark + "),重连失败!" + tc.IP + ":" + tc.Port);
                     }
                 }
             }
             catch (Exception ex)
             {
                 LogHelper.WriteError("RDS服务(" + rm.RDSMark + "),重连失败!" + tc.IP + ":" + tc.Port, ex);
             }
         }
         //处理超时未处理的 命令或命令执行结果
         List <string> TimeoutOrderAndResult = new List <string>();
         foreach (string key in OrderAndResultTime.Keys)
         {
             DateTime dt = (DateTime)OrderAndResultTime[key];
             if (dt.AddMinutes(10) < DateTime.Now)
             {
                 TimeoutOrderAndResult.Add(key);
             }
         }
         foreach (string key in TimeoutOrderAndResult)
         {
             OrderAndResultTime.Remove(key);
         }
         if (TimeoutOrderAndResult.Count > 0)
         {
             LogHelper.WriteInfo("清除超时的命令,或未处理的命令结果,总计:" + TimeoutOrderAndResult.Count);
         }
     }
 }
Ejemplo n.º 7
0
        public Form1()
        {
            InitializeComponent();
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
            length = 0;

            cli1 = new TcpCli(new Coder(Coder.EncodingMethod.ASCII));
            //cli1.Resovlver = new DatagramResolver("16");//这里的设置没啥用,因为我不准备使用它的解析器。
            cli1.ReceivedDatagram   += new NetEvent(RecvData);
            cli1.DisConnectedServer += new NetEvent(ClientClose);
            cli1.ConnectedServer    += new NetEvent(ClientConn);
        }
        /// <summary>
        /// 得到客户端缓存(同步)
        /// </summary>
        public bool GetCahceSyn(string userid)
        {
            TcpCli    client = new TcpCli(ShareData.LocalIp, ShareData.LocalPort);
            MsgStruts msg    = new MsgStruts();

            msg.command      = msgCommand.GetCache;
            msg.msgtype      = msgType.SendText;
            msg.msgsendstate = msgSendState.single;
            msg.Data         = _coder.GetEncodingBytes(userid);
            MsgStruts msgb = client.SendAndBack(msg);
            DataSet   ds   = DataSerialize.GetDatasetFromByte(msgb.Data);

            return(ClientCache.SetCache(msgb.Data));
        }
Ejemplo n.º 9
0
 /// <summary>
 /// 文件或目錄變更時事件的方法
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private static void fswWatcher_Changed(object sender, FileSystemEventArgs e)
 {
     if (e.Name == "RDSConfig.xml")
     {
         LogHelper.WriteInfo("RDS配置文件RDSConfig.xml发生修改重新建立所有连接!");
         Loaddata();
         foreach (RDSConfigModel val in RDSClient.Values)
         {
             TcpCli tc = val.TcpClient;
             tc.Close();
             tc = null;
         }
         RDSClient.Clear();
         InitScoketClient();
     }
 }
Ejemplo n.º 10
0
        public static void Main()
        {
            Console.WriteLine("Begin to Test TcpCli Class..");
            //ArrayList al = new ArrayList();

            TcpClient test = new TcpClient();
            TcpCli    cli1 = new TcpCli(new Coder(Coder.EncodingMothord.Default));

            //cli1.Resovlver = new DatagramResolver("]}");
            cli1.ReceivedDatagram   += new NetEvent(test.RecvData);
            cli1.DisConnectedServer += new NetEvent(test.ClientClose);
            cli1.ConnectedServer    += new NetEvent(test.ClientConn);
            cli1.Connect("127.0.0.1", 5001);
            //命令控制循环
            while (true)
            {
                Console.Write(">");
                string cmd = Console.ReadLine();
            }//end of while
        }
Ejemplo n.º 11
0
 private static bool ReConnect(TcpCli tc)
 {
     try
     {
         tc.Connect();
         Thread.Sleep(4000);
         if (tc.IsConnected)
         {
             return(true);
         }
         else
         {
             return(false);
         }
     }
     catch
     {
         return(false);
     }
 }
Ejemplo n.º 12
0
        /// <summary>
        /// 构建连接
        /// </summary>
        private void MakeConnectWithListener()
        {
            cli = new TcpCli(new Coder(Coder.EncodingMothord.UTF8));

            //cli.Resovlver = new DatagramResolver("}");
            cli.ReceivedDatagram   += new NetEvent(RecvData);
            cli.DisConnectedServer += new NetEvent(ClientClose);
            cli.ConnectedServer    += new NetEvent(ClientConn);

            if (!cli.IsConnected) // 启动就连接
            {
                try
                {
                    cli.Connect(Service_IP, Service_Port);
                    StatusMessage = "已连接";
                }
                catch (Exception ex)
                {
                    StatusMessage = "连接远程服务器失败";
                    cli.Close();
                }
            }
        }
 public ClientHandles(TcpCli tcpcli)
 {
     _tcpcli = tcpcli;
 }
Ejemplo n.º 14
0
        private void toolStripButtonStart_Click(object sender, EventArgs e)
        {
            try
            {
                switch (toolStripButtonStart.Text)
                {
                case "Start Connect":
                    toolStripButtonStart.BackColor             = Color.Blue;
                    toolStripButtonStart.ImageTransparentColor = Color.Blue;
                    toolStripButtonStart.BackgroundImage       = Client.Properties.Resources.Blue;
                    toolStripButtonStart.Image = Client.Properties.Resources.Blue;
                    toolStripButtonStart.Text  = "DisConnect";
                    PortNo.Enabled             = false;
                    IPNo.Enabled = false;
                    tc           = new TcpCli(new Coder(Coder.EncodingMothord.UTF8));
                    //tc = new TcpCli(new Coder(Coder.EncodingMothord.HexString));
                    //tc.Resovlver = new DatagramResolver(Convert.ToChar(4).ToString());//EOT (end of transmission)
                    tc.ReceivedDatagram   += new NetEvent(RecvData);
                    tc.DisConnectedServer += new NetEvent(ClientClose);
                    tc.ConnectedServer    += new NetEvent(ClientConn);
                    tc.ExceptionMessage   += new NetEvent(ClienError);
                    tc.Connect(IPNo.Text, Convert.ToUInt16(PortNo.Text));
                    tc.HeadLength      = true;
                    buttonSend.Enabled = true;
                    SendData.Enabled   = true;
                    rtbe1.SetText(String.Format("Connect to [{0}]({1})", IPNo.Text, PortNo.Text), true);
                    break;

                case "DisConnect":
                    toolStripButtonStart.BackColor             = Color.Red;
                    toolStripButtonStart.ImageTransparentColor = Color.Red;
                    toolStripButtonStart.BackgroundImage       = Client.Properties.Resources.Red;
                    toolStripButtonStart.Image = Client.Properties.Resources.Red;
                    toolStripButtonStart.Text  = "Start Connect";
                    PortNo.Enabled             = true;
                    IPNo.Enabled       = true;
                    buttonSend.Enabled = false;
                    SendData.Enabled   = false;
                    tc.Close();
                    tc.Dispose();
                    rtbe1.SetText(String.Format("DisConnect to [{0}]({1})", IPNo.Text, PortNo.Text), true);
                    break;

                default:
                    break;
                }
            }
            catch (Exception ex)
            {
                toolStripStatusLabel1.Text                 = ex.Message.ToString();
                toolStripButtonStart.BackColor             = Color.Red;
                toolStripButtonStart.ImageTransparentColor = Color.Red;
                toolStripButtonStart.BackgroundImage       = Client.Properties.Resources.Red;
                toolStripButtonStart.Image                 = Client.Properties.Resources.Red;
                toolStripButtonStart.Text = "Start Connect";
                PortNo.Enabled            = true;
                IPNo.Enabled       = true;
                buttonSend.Enabled = false;
                SendData.Enabled   = false;
                tc.Close();
                tc.Dispose();
                rtbe1.SetText(String.Format("DisConnect to [{0}]({1})", IPNo.Text, PortNo.Text), true);
            }
        }
Ejemplo n.º 15
0
        public static void Main()
        {
            Console.WriteLine("Begin to Test TcpCli Class..");
            //ArrayList al = new ArrayList();

            TcpClient test = new TcpClient();
            TcpCli    cli1 = new TcpCli(new Coder(Coder.EncodingMothord.Default));

            cli1.Resovlver           = new DatagramResolver("]}");
            cli1.ReceivedDatagram   += new NetEvent(test.RecvData);
            cli1.DisConnectedServer += new NetEvent(test.ClientClose);
            cli1.ConnectedServer    += new NetEvent(test.ClientConn);

            try
            {
                //命令控制循环
                while (true)
                {
                    Console.Write(">");
                    string cmd = Console.ReadLine();

                    if (cmd.ToLower() == "exit")
                    {
                        break;
                    }
                    if (cmd.ToLower() == "close")
                    {
                        //cli.Close();
                        continue;
                    }

                    if (cmd.ToLower().IndexOf("conn") != -1)
                    {
                        cmd = cmd.ToLower();
                        string[] para = cmd.Split(' ');

                        if (para.Length != 3)
                        {
                            Console.WriteLine("Error Command");
                            continue;
                        }

                        try
                        {
                            string conn = para[1];
                            ushort port = ushort.Parse(para[2]);
                            cli1.Connect(conn, port);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e.Message);
                        }

                        continue;
                    }

                    if (cmd.ToLower().IndexOf("send") != -1)
                    {
                        cmd = cmd.ToLower();
                        string[] para = cmd.Split(' ');

                        if (para.Length != 2)
                        {
                            Console.WriteLine("Error Command");
                        }
                        else
                        {
                            try
                            {
                                cli1.Send(para[1]);
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.Message);
                            }
                        }

                        continue;
                    }
                    Console.WriteLine("Unkown Command");
                }//end of while

                Console.WriteLine("End service");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
Ejemplo n.º 16
0
        public static bool SendMsg(string sysflag, string token, long cid, QMDPartnerPackage package)
        {
            RDSConfigModel rcm = GetRDS(sysflag, cid);

            if (rcm == null)
            {
                return(false);
            }
            TcpCli tc = rcm.TcpClient;

            try
            {
                if (tc.IsConnected)
                {
                    byte[]       sfdata  = Encoding.ASCII.GetBytes(sysflag);
                    byte[]       ciddata = System.BitConverter.GetBytes(cid);
                    MemoryStream ms      = new MemoryStream();
                    ProtoBuf.Serializer.Serialize(ms, package);
                    byte[] bytes = new byte[ms.Length];
                    ms.Seek(0, SeekOrigin.Begin);
                    ms.Read(bytes, 0, bytes.Length);
                    ms.Close();
                    //将系统标示加入数据头部长度20字节,CID数据 8个字节
                    byte[] data = new byte[bytes.Length + 20 + 8];
                    Array.Copy(sfdata, data, sfdata.Length);
                    Array.Copy(ciddata, 0, data, 20, 8);
                    Array.Copy(bytes, 0, data, 28, bytes.Length);
                    tc.SendData(data);
                    if (package.dwPackageType == 30 && (package.dwOperation1 == 10 || package.dwOperation1 == 33 || package.dwOperation1 == 41 || package.dwOperation1 == 99)) //需要回传数据的记录指令,以便于应答 时确认发送者
                    {
                        if (package.dwOperation1 == 41)                                                                                                                        //行驶记录仪参数查询特殊处理同时加入命令字做为指令细分
                        {
                            MemoryStream msc = new MemoryStream(package.byteContext);
                            CTS_DriveRecordDataCollectionRequest reqdata = ProtoBuf.Serializer.Deserialize <CTS_DriveRecordDataCollectionRequest>(msc);
                            AddOrder(sysflag, token, cid, package.dwPackageType, package.dwOperation1, reqdata.nCMD.ToString());
                        }
                        else if (package.dwOperation1 == 99)//透传指令 下发加入透传id作为细分指令
                        {
                            MemoryStream             msc     = new MemoryStream(package.byteContext);
                            CTS_TransmissionProtocol reqdata = ProtoBuf.Serializer.Deserialize <CTS_TransmissionProtocol>(msc);
                            string extflag = reqdata.nTransID.ToString("X2");
                            if (reqdata.nTransID == 0x8F02)//解放消贷控制指令特殊处理,因为上行和下行nTransID不一致。此处填充上行id方便回指令结果
                            {
                                int respnTransID = reqdata.nTransID == 0x8F02 ? 0x0f01 : reqdata.nTransID;
                                extflag = respnTransID.ToString("X2") + reqdata.sData[0].ToString("X2") + reqdata.sData[1].ToString("X2");
                                AddOrder(sysflag, token, cid, package.dwPackageType, package.dwOperation1, extflag);
                            }
                        }
                        else
                        {
                            AddOrder(sysflag, token, cid, package.dwPackageType, package.dwOperation1);
                        }
                    }
                    return(true);
                }
                else
                {
                    LogHelper.WriteInfo(sysflag + "RDS连接中断发送数据失败(" + string.Join(",", rcm.SysFlag) + ")");
                    if (ReConnect(tc))
                    {
                        LogHelper.WriteInfo(sysflag + "RDS服务(" + rcm.RDSMark + ")重连成功发送数据!");
                        return(SendMsg(sysflag, token, cid, package));
                    }
                    else
                    {
                        return(false);
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteError(sysflag + "程序异常发送数据失败! ", ex);
                return(false);
            }
        }