Example #1
0
        /// <summary>
        /// 服务初始化:这里要导入集成配置文件
        /// </summary>
        private void MakeServiceInitialization()
        {
            //TODO:这部分最后加,现在暂时使用默认值。 2020年10月22日10:57:37


            svr = new TcpSvr(This_service_Config.ServicePort, This_service_Config.ServiceMaxConnectCount, new Coder(Coder.EncodingMothord.UTF8));
        }
Example #2
0
        /// <summary>
        /// 构造函数
        /// </summary>
        public Service_Main()
        {
            YingHeXinList     = new List <ManagerMessage>();
            Single_List_By_ID = new List <SingleID_List>();

            svr = new TcpSvr((ushort)TCPport, (ushort)TCPConnectMax, new Coder(Coder.EncodingMothord.UTF8));


            svr.Resovlver = new DatagramResolver("0");//这里的设置没啥用,因为我不准备使用它的解析器。
            //处理客户端连接数已满事件
            svr.ServerFull += new NetEvent(ServerFull);
            //处理新客户端连接事件
            svr.ClientConn += new NetEvent(ClientConn);
            //处理客户端关闭事件
            svr.ClientClose += new NetEvent(ClientClose);
            //处理接收到数据事件
            svr.RecvData += new NetEvent(RecvData);

            svr.Start();
            Console.WriteLine("Server is listen...{0}", svr.ServerSocket.LocalEndPoint.ToString());

            timer_LiuCheng          = new Timer(2000);
            timer_LiuCheng.Elapsed += Timer_LiuCheng_Elapsed;
            timer_LiuCheng.Start();
        }
Example #3
0
        private void toolStripButtonStart_Click(object sender, EventArgs e)
        {
            switch (toolStripButtonStart.Text)
            {
            case "Start Server":
                toolStripButtonStart.BackColor             = Color.Blue;
                toolStripButtonStart.Image                 = Login.Properties.Resources.connect_no_128px_14813_easyicon_net1;
                toolStripButtonStart.ImageTransparentColor = Color.Transparent;
                //toolStripButtonStart.BackgroundImage = Login.Properties.Resources.Blue;
                toolStripButtonStart.Text = "Stop Server";
                PortNo.Enabled            = false;
                ts = new TcpSvr(Convert.ToUInt16(PortNo.Text), 4096, new Coder(Coder.EncodingMothord.UTF8));
                //ts = new TcpSvr(Convert.ToUInt16(PortNo.Text), 4096, new Coder(Coder.EncodingMothord.HexString));
                //ts.Resovlver = new DatagramResolver(Convert.ToChar(4).ToString());//EOT (end of transmission)
                ts.ClientConn  += new NetEvent(ClientConn);
                ts.ServerFull  += new NetEvent(ServerFull);
                ts.ClientClose += new NetEvent(ClientClose);
                ts.RecvData    += new NetEvent(RecvData);
                ts.HeadLength   = true;
                ts.Start();
                if (DebugShow)
                {
                    rtbe1.SetText(string.Format("Server is listen{0} Start", ts.ServerSocket.LocalEndPoint.ToString()), true);
                }
                listView2.Items.Clear();
                SocketStatus.Text      = String.Empty;
                SocketStatusLabel.Text = String.Empty;
                SessionCount.Text      = String.Format("Current count of Client is {0}/{1}", ts.SessionCount, ts.Capacity);
                break;

            case "Stop Server":
                toolStripButtonStart.BackColor             = Color.Red;
                toolStripButtonStart.Image                 = Login.Properties.Resources.connect_established_128px_14214_easyicon_net1;
                toolStripButtonStart.ImageTransparentColor = Color.Transparent;
                //toolStripButtonStart.BackgroundImage = Login.Properties.Resources.Red;
                toolStripButtonStart.Text = "Start Server";
                if (DebugShow)
                {
                    rtbe1.SetText(string.Format("Server is listen{0} Stop", ts.ServerSocket.LocalEndPoint.ToString()), true);
                }
                PortNo.Enabled = true;
                ts.Stop();
                listView2.Items.Clear();
                SocketStatus.Text      = String.Empty;
                SocketStatusLabel.Text = String.Empty;
                SessionCount.Text      = String.Empty;
                ts.Dispose();
                break;

            default:
                break;
            }
            startServerToolStripMenuItem.Text = toolStripButtonStart.Text;
        }
Example #4
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="TcpSvr">通讯实例</param>
        public ServerHandle(TcpSvr TcpSvr)
        {
            _tcpsvr = TcpSvr;

            string  sqlstr = "SELECT * FROM GSSCONFIG WHERE ID=1";
            DataSet ds     = DbHelperSQLite.Query(sqlstr);

            if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows != null)
            {
                string dbip   = ds.Tables[0].Rows[0]["GSSDBIP"].ToString();
                string dbname = ds.Tables[0].Rows[0]["GSSDBNAME"].ToString();
                string dbuid  = ds.Tables[0].Rows[0]["GSSDBUID"].ToString();
                string dbpsw  = ds.Tables[0].Rows[0]["GSSDBPSW"].ToString();
                gssdbconn = @"Data Source=" + dbip + ";Initial Catalog=" + dbname + ";Persist Security Info=True;User ID=" + dbuid + ";Password="******"";
            }

            dbhandle = new DBHandle();
        }
Example #5
0
        private void clientRecvData(object sender, NetEventArgs e)
        {
            //1.看看,哪个端口发来的数据。
            TcpSvr CustomerInClientPort = (TcpSvr)sender; //外网用户连接到我们的哪个端口了。
            //2.找对应的Session
            int customerIndex = -1;

            for (int i = 0; i < PortsForListing.Count; i++)
            {
                if (PortsForListing[i].Port.Port == CustomerInClientPort.Port)
                {
                    //找到了
                    customerIndex = i;
                    // Session session = PortsForListing[i].Client; //客户端的信息,一会用
                    // PortsForListing[i].Lan; // 客户端要连接的内网 ip和端口,一会用
                    break;
                }
            }
            ////3.找目标IP PORT TYPE
            //int clientIndex = -1;
            //for (int i = 0; i < All_clientList_Config.Count; i++)
            //{
            //    if (All_clientList_Config[i].Session.ID== PortsForListing[customerIndex].Client.ID)
            //    {
            //        clientIndex = i;
            //        break;
            //    }
            //}

            //4.去客户端抓取内容
            MessageForClient messageForClient = new MessageForClient();

            messageForClient.MsgID       = Guid.NewGuid().ToString();
            messageForClient.MessageType = PortsForListing[customerIndex].Lan.Type;
            messageForClient.IP          = PortsForListing[customerIndex].Lan.IP;
            messageForClient.Port        = PortsForListing[customerIndex].Lan.Port;
            messageForClient.Content     = e.Client.Datagram;

            string json = Newtonsoft.Json.JsonConvert.SerializeObject(messageForClient);

            singIn.Add(PortsForListing[customerIndex].Client, messageForClient.MsgID, e.Client);
            svr.Send(PortsForListing[customerIndex].Client, json); //此处待补充 :2020年10月26日16:01:01
        }
Example #6
0
 private void RecvData(object sender, NetEventArgs e)
 {
     try
     {
         if (DebugShow)
         {
             rtbe1.SetText(string.Format("from:{0} recv data:[{1}]", e.Client, e.Client.Datagram.Replace("\r\n", "")), true);
         }
         SocketStatus.Text      = e.Client.ID.ToString();
         SocketStatusLabel.Text = e.Client.Datagram.Replace("\r\n", "");
         UpdItemB(e.Client.ID.ToString(), String.Empty);
         UpdItem(e.Client.ID.ToString(), e.Client.Datagram.ToString());
         //if(DebugShow) rtbe1.SetText(Game.Network.Coder.ShowHexString(e.Client.Datagram), true);
         FunctionParser fp           = new FunctionParser(e);
         String         ReturnString = fp.ReturnFunction();
         fp.Dispose();
         //String ReturnString = LoginParser(e);
         //ReturnString += Convert.ToChar(4).ToString();
         TcpSvr svr = (TcpSvr)sender;
         //测试把收到的数据返回给客户端
         svr.Send(e.Client, ReturnString);
         if (DebugShow)
         {
             rtbe1.SetText(string.Format("from:{0} send data:[{1}]", e.Client, ReturnString), true);
         }
         //throw new NotImplementedException();
         SessionCount.Text = String.Format("Current count of Client is {0}/{1}", ts.SessionCount, ts.Capacity);
         UpdItemB(e.Client.ID.ToString(), ReturnString);
     }
     catch (Exception ex)
     {
         SocketStatusLabel.Text = ex.Message;
         String Datagram = "{\"methodName\":\"Error\",\"paramObject\":{\"Cord\":\"9999\",\"text\":\"";
         Datagram += ex.Message;
         Datagram += "\"}}";
         TcpSvr svr = (TcpSvr)sender;
         //测试把收到的数据返回给客户端
         svr.Send(e.Client, Datagram);
     }
 }
Example #7
0
        private void toolStripButtonStart_Click(object sender, EventArgs e)
        {
            switch (toolStripButtonStart.Text)
            {
            case "Start Server":
                toolStripButtonStart.BackColor             = Color.Blue;
                toolStripButtonStart.ImageTransparentColor = Color.Blue;
                toolStripButtonStart.BackgroundImage       = Game.Properties.Resources.Blue;
                toolStripButtonStart.Image = Game.Properties.Resources.Blue;
                toolStripButtonStart.Text  = "Stop Server";
                PortNo.Enabled             = false;
                //ts = new TcpSvr(Convert.ToUInt16(PortNo.Text), 4096, new Coder(Coder.EncodingMothord.UTF8));
                ts = new TcpSvr(Convert.ToUInt16(PortNo.Text), 4096, new Coder(Coder.EncodingMothord.HexString));
                //ts.Resovlver = new DatagramResolver(Convert.ToChar(4).ToString());//EOT (end of transmission)
                ts.ServerFull  += new NetEvent(ServerFull);
                ts.ClientConn  += new NetEvent(ClientConn);
                ts.ClientClose += new NetEvent(ClientClose);
                ts.RecvData    += new NetEvent(RecvData);
                ts.Start();
                rtbe1.SetText(string.Format("Server is listen{0} Start", ts.ServerSocket.LocalEndPoint.ToString()), true);
                break;

            case "Stop Server":
                toolStripButtonStart.BackColor             = Color.Red;
                toolStripButtonStart.ImageTransparentColor = Color.Red;
                toolStripButtonStart.BackgroundImage       = Game.Properties.Resources.Red;
                toolStripButtonStart.Image = Game.Properties.Resources.Red;
                toolStripButtonStart.Text  = "Start Server";
                rtbe1.SetText(string.Format("Server is listen{0} Stop", ts.ServerSocket.LocalEndPoint.ToString()), true);
                PortNo.Enabled = true;
                ts.Stop();
                ts.Dispose();
                break;

            default:
                break;
            }
        }
Example #8
0
        private void RecvData(object sender, NetEventArgs e)
        {
            string info = string.Format("recv data:{0} from:{1}.", e.Client.Datagram, e.Client);

            //Console.WriteLine(info);
            //Console.Write(">");
            rtbe1.SetText(info, true);


            SocketStatus.Text      = e.Client.ID.ToString();
            SocketStatusLabel.Text = info;

            UpdItem(e.Client.ID.ToString(), e.Client.Datagram.ToString());

            rtbe1.SetText(Game.Network.Coder.ShowHexString(e.Client.Datagram), true);

            TcpSvr svr = (TcpSvr)sender;
               //测试把收到的数据返回给客户端
               svr.Send(e.Client, e.Client.Datagram);

            //throw new NotImplementedException();
            SessionCount.Text = String.Format("Current count of Client is {0}/{1}", ts.SessionCount, ts.Capacity);
        }
Example #9
0
        void RecvData(object sender, NetEventArgs e)
        {
            //  string info = string.Format("recv data:{0} from:{1}.", e.Client.Datagram, e.Client);
            //  Console.WriteLine(info);
            TcpSvr svr = (TcpSvr)sender;

            //测试把收到的数据返回给客户端
            // svr.SendText(e.Client, e.Client.Datagram);
            //svr.SendFile(this.textBox1.Text);
            //   Console.Write(">");

            DETECTION_INFO ff = new DETECTION_INFO();
            int            si = Marshal.SizeOf(ff);

            //获取接受到的消息,已经去头,但是包括尾
            // byte[] recivebuffer = System.Text.Encoding.Default.GetBytes(e.Client.Datagram);
            List <Byte> lbyte = new List <Byte>();

            byte[] recivebuffer = e.Client.RvBufer;

            for (int k = 0; k < e.Client.RvBufer.Length - 1; k++)
            {
                byte b = e.Client.RvBufer[k];
                byte c = e.Client.RvBufer[k + 1];
                if (b == 0x5a && c == 0x01)
                {
                    lbyte.Add(0x5b);
                }
                else if (b == 0x5a && c == 0x02)
                {
                    lbyte.Add(0x5a);
                }
                else if (b == 0x5e && c == 0x01)
                {
                    lbyte.Add(0x5d);
                }
                else if (b == 0x5e && c == 0x02)
                {
                    lbyte.Add(0x5e);
                }
                else
                {
                    lbyte.Add(b);
                }
            }
            for (int i = 0; i < lbyte.Count; i++)
            {
                recivebuffer[i] = lbyte[i];
            }

            string batch_id = null;
            string task_id  = null;
            //解析消息头
            MSGHEAD head = new MSGHEAD();

            byte[] headbuffer = new byte[MsgHeadLength];
            Array.Copy(recivebuffer, 1, headbuffer, 0, MsgHeadLength);
            head = Get_MSGHeader(headbuffer);
            // head = Get_MSGHeader(e.Client.Datagram.Substring(0, MsgHeadLength));
            //消息体数据

            int Meg_len = (int)head.Msg_Length - MsgTotalLen;

            byte[] buffer = new byte[Meg_len];//
            Array.Copy(recivebuffer, 15, buffer, 0, Meg_len);

//             for (int i = 0; i < head.Msg_Length; ++i)
//             {
//                 byte t = recivebuffer[i];
//                 Console.Write("{0:X}", t);//这个就是主要,填充
//                 Console.Write(" ");
//
//             }
            // Console.Write("?");
            //接入码s
            UInt32   centercode = head.Msg_GNSSCenter;
            TastInfo Tinfo      = new TastInfo();

            byte[] MesBody = null;
            //空数据
            byte[] nu = new byte[0];
            //判定是不是注册
            REGISTER Is_re = new REGISTER();
            //根据不同消息进行处理

            Session    sendDataSession = svr.FindSession(e.Client.ClientSocket);
            ICloneable copySession     = (ICloneable)sendDataSession;
            Session    clientSession   = (Session)copySession.Clone();

            //    Console.Write("*"+head.Msg_ID);
            switch (head.Msg_ID)
            {
            //中心站只发过一个空包,或者包括简单的配置要求,服务器端组帧。
            //链路登陆请求消息
            case 0x0001:
                Is_re = IsRegest(head, buffer);
                // object structType = Is_re;
                byte[] btArray = new byte[1];
                btArray[0] = Is_re.result;
                //MesBody = BitConverter.GetBytes(Is_re.result);
                svr.SendMessage(e.Client, btArray, 0x0002, centercode);    //登录应答
                if (Is_re.result == 0)
                {
                    foreach (DictionaryEntry de in svr._sessionTable)     //ht为一个Hashtable实例
                    {
                        if (de.Value.Equals(clientSession))
                        {
                            clientSession.DeviceId = Is_re.nameId;
                            SessionId id = clientSession.ID;
                            svr._sessionTable.Remove(clientSession.ID);
                            svr._sessionTable.Add(id, clientSession);
                            break;
                        }
                    }


                    //更新数据库状态
                    string sql = "UPDATE device SET Device_Status = 1,Sockets = '" + clientSession.ClientSocket.RemoteEndPoint + "' WHERE Device_ID = '" + clientSession.DeviceId + "'";
                    database.Open();
                    database.ExcuteNonQuery(sql);
                    database.Close();
                }
                else
                {
                    //Session sendDataSession = svr.FindSession(e.Client.ClientSocket);
                    //更新数据库状态
                    string sql = "UPDATE device SET Device_Status = 0 WHERE Device_ID = '" + clientSession.DeviceId + "'";
                    database.Open();
                    database.ExcuteNonQuery(sql);
                    database.Close();
                }
                break;

            //用于心跳监测
            case 0x0003:

                svr.SendMessage(clientSession, nu, 0x0004, centercode);    //开启视频

                // Console.Write("|" + buffer[1]);
                break;

            //批量任务下发(中心站往终端)
            //TEST NUM	4	Unint32_t	结果个数
            //TEST INFO	804	Octet_string	检测结果信息
            case 0x0005:
                //获取任务个数
                byte[] numbuffer = new byte[4];                //
                Array.Copy(recivebuffer, 14, numbuffer, 0, 4); //获取个数
                //                     Array.Reverse(numbuffer);
                //                     UInt32 num = BitConverter.ToUInt32(numbuffer,0);
                //组帧
                TASK_INFO taskinfo = new TASK_INFO();
                object    structT  = taskinfo;
                MesBody = Tinfo.StructureToByteArrayEndian(structT);
                foreach (Session cliSession in svr._sessionTable.Values)
                {
                    if (cliSession.DeviceId == deviceid)
                    {
                        svr.SendMessage(cliSession, nu, 0x0005, centercode);    //开启视频
                        break;
                    }
                }

                //发送

                break;
            //检测结果上传消息

            //检测结果上传(终端往中心站)
            case 0x0006:
                sendDataSession = svr.FindSession(e.Client.ClientSocket);

                deviceid = sendDataSession.DeviceId;
                UpLoad(buffer, deviceid.ToString());
                break;

            //开启实时监控
            case 07:
                //获取发过来的设备id,根据id找到socket
                deviceid = UInt32.Parse(System.Text.Encoding.UTF8.GetString(buffer));    //提取控制的deviceid

                foreach (Session cliSession in svr._sessionTable.Values)
                {
                    if (cliSession.DeviceId == deviceid)
                    {
                        svr.SendMessage(cliSession, nu, 0x0007, centercode);    //开启视频
                        break;
                    }
                }

                break;

            //中心站往检测仪结束实时视频

            case 08:
                deviceid = UInt32.Parse(System.Text.Encoding.UTF8.GetString(buffer));    //提取控制的deviceid
                foreach (Session cliSession in svr._sessionTable.Values)
                {
                    if (cliSession.DeviceId == deviceid)
                    {
                        svr.SendMessage(cliSession, nu, 0x0008, centercode);    //开启视频
                        break;
                    }
                }

                break;

            case 09:
                //视频上传(检测仪主动请求,中心站返回消息)
                UInt32 res = 0;
                byte[] meg = BitConverter.GetBytes(res);
                Array.Reverse(meg);
                svr.SendMessage(e.Client, meg, 0x000a, centercode);    //录制视频上传应答
                svr.FileBegine = true;
                svr.IsPic      = false;
                break;

            //证件上传请求
            case 0x0000b:
                UInt32 resu = 0;
                byte[] megs = BitConverter.GetBytes(resu);
                Array.Reverse(megs);
                svr.SendMessage(e.Client, nu, 0x000c, centercode);    //上传应答
                svr.FileBegine = true;
                svr.IsPic      = true;
                foreach (Session cliSession in svr._sessionTable.Values)
                {
                    if (cliSession.ClientSocket == e.Client.ClientSocket)
                    {
                        svr.device_id = cliSession.DeviceId.ToString();
                    }
                }
                break;

            //视频调阅请求
            case 0x0000d:
                byte[] dev = new byte[12];
                deviceid = UInt32.Parse(System.Text.Encoding.UTF8.GetString(buffer, 0, 4)); //提取控制的deviceid
                batch_id = System.Text.Encoding.UTF8.GetString(buffer, 4, 8);               //提取控制的deviceid
                task_id  = System.Text.Encoding.UTF8.GetString(buffer, 12, 4);              //提取控制的deviceid
                Array.Copy(buffer, 4, dev, 0, 12);

                foreach (Session cliSession in svr._sessionTable.Values)
                {
                    if (cliSession.DeviceId == deviceid)
                    {
                        svr.SendMessage(cliSession, nu, 0x0008, centercode);    //开启视频
                        break;
                    }
                }
                break;

            //视频调阅
            case 0x000e:
                //将文件存储路径插入数据库
                string filepath = System.Text.Encoding.UTF8.GetString(buffer, 0, GetLen(buffer)).Trim();
                //更新数据库状态
                string sql2 = "UPDATE detectioninfo SET video_path = '" + filepath + "' WHERE batch_id = '" + batch_id + "' AND task_id = '" + task_id + "'";
                database.Open();
                database.ExcuteNonQuery(sql2);
                database.Close();
                break;

            //工作参数
            case 0x0000f:
                break;

            //状态和工作参数
            case 0x0010:

                break;

            //参数配置
            case 0x0011:
                byte[] aa = new byte[4];
                Array.Copy(buffer, 0, aa, 0, 4);
                byte[] Msg = new byte[buffer.Length - 4];
                Array.Copy(buffer, 4, Msg, 0, buffer.Length - 4);
                deviceid = UInt32.Parse(System.Text.Encoding.UTF8.GetString(aa));    //提取控制的deviceid
                foreach (Session cliSession in svr._sessionTable.Values)
                {
                    if (cliSession.DeviceId == deviceid)
                    {
                        svr.SendMessage(cliSession, Msg, 0x0012, centercode);    //开启视频
                        break;
                    }
                }

                break;

            //数据管理
            case 0x0012:

                break;

            //设备管理消息
            case 0x0013:

                break;

            //远程版本升级
            case 0x0014:

                break;

            //版本升级应答
            case 0x0015:

                break;

            //通用消息
            case 0xf000:

                break;

            default:
                break;
            }
        }
Example #10
0
        static void Main()
        {
            while (true)
            {
                try
                {
                    Console.WriteLine("Begin to Start TcpSvr SVN...");

                    TestTcpSvr tts = new TestTcpSvr();
                    tts.InitSys();
                    #region 定时器事件
                    System.Timers.Timer aTimer = new System.Timers.Timer();
                    aTimer.Elapsed += new ElapsedEventHandler(TimeEvent);
                    aTimer.Interval = 5 * 1000;    //配置文件中配置的秒数
                    aTimer.Enabled  = true;
                    #endregion
                    string ipaddr = getLocalIP();
                    Console.WriteLine(ipaddr);
                    ushort portNumber = 5632;
                    IniAc  ini        = new IniAc();
                    ipaddr = ini.ReadValue("NET", "ip");
                    Console.WriteLine(ipaddr);
                    string portStr = ini.ReadValue("NET", "port");
                    portNumber = System.Convert.ToUInt16(portStr);

                    //TcpSvr svr = new TcpSvr(9050,4);//默认使用Encoding.Default编码方式
                    TcpSvr svr = new TcpSvr(IPAddress.Parse(ipaddr), 5632, 80, new Coder(Coder.EncodingMothord.Unicode), "D:\\MyVidio");

                    svr.Resovlver = new DatagramResolver("]");//0x5d

                    //定义服务器的4个事件

                    //服务器满
                    svr.ServerFull += new NetEvent(tts.ServerFull);

                    //新客户端连接
                    svr.ClientConn += new NetEvent(tts.ClientConn);

                    //客户端关闭
                    svr.ClientClose += new NetEvent(tts.ClientClose);

                    //接收到数据
                    svr.RecvData += new NetEvent(tts.RecvData);

                    //  svr.LogIn += new NetEvent(this.LogIn);

                    svr.Start();

                    Console.WriteLine("Server is listen...{0}",
                                      svr.ServerSocket.LocalEndPoint.ToString());
                    //命令控制循环
                    #region

                    while (true)
                    {
                        Console.Write(">");

                        string cmd = Console.ReadLine();

                        //退出测试程序
                        if (cmd.ToLower() == "exit")
                        {
                            break;
                        }

                        //停止服务器程序
                        if (cmd.ToLower() == "stop")
                        {
                            svr.Stop();

                            Console.WriteLine("Server is Stop.");

                            continue;
                        }

                        //运行服务器程序
                        if (cmd.ToLower() == "start")
                        {
                            svr.Start();

                            Console.WriteLine("Server is listen...{0}",
                                              svr.ServerSocket.LocalEndPoint.ToString());

                            continue;
                        }

                        //察看服务器在线客户端数目和容量
                        if (cmd.ToLower() == "count")
                        {
                            Console.WriteLine("Current count of Client is {0}/{1}",
                                              svr.SessionCount, svr.Capacity);
                            continue;
                        }

                        //发送数据到客户端格式:send [Session] [stringData]
                        if (cmd.ToLower().IndexOf("send") != -1)
                        {
                            cmd = cmd.ToLower();

                            string[] para = cmd.Split(' ');

                            if (para.Length == 3)
                            {
                                Session client = (Session)svr.SessionTable[new SessionId(int.Parse
                                                                                             (para[1]))];

                                if (client != null)
                                {
                                    svr.SendText(client, para[2]);
                                }
                                else
                                {
                                    Console.WriteLine("The Session is Null");
                                }
                            }
                            else
                            {
                                Console.WriteLine("Error Command");
                            }

                            continue;
                        }

                        //从服务器上踢掉一个客户端
                        if (cmd.ToLower().IndexOf("kick") != -1)
                        {
                            cmd = cmd.ToLower();

                            string[] para = cmd.Split(' ');

                            if (para.Length == 2)
                            {
                                Session client = (Session)svr.SessionTable[new SessionId(int.Parse
                                                                                             (para[1]))];

                                if (client != null)
                                {
                                    svr.CloseSession(client);
                                }
                                else
                                {
                                    Console.WriteLine("The Session is Null");
                                }
                            }
                            else
                            {
                                Console.WriteLine("Error command");
                            }

                            continue;
                        }

                        //列出服务器上所有的客户端信息
                        if (cmd.ToLower() == "list")
                        {
                            int i = 0;

                            foreach (Session Client in svr.SessionTable.Values)
                            {
                                if (Client != null)
                                {
                                    i++;
                                    string info = string.Format("{0} Client:{1} connected server Session:{2}. Socket Handle:{3}",
                                                                i,
                                                                Client.ClientSocket.RemoteEndPoint.ToString(),
                                                                Client.ID,
                                                                Client.ClientSocket.Handle);

                                    Console.WriteLine(info);
                                }
                                else
                                {
                                    i++;

                                    string info = string.Format("{0} null Client", i);
                                    Console.WriteLine(info);
                                }
                            }

                            continue;
                        }

                        Console.WriteLine("Unkown Command");
                    }//end of while
                    #endregion
                    Console.WriteLine("End service");
                }
                catch (Exception ex)
                {
                    string    sql      = "UPDATE device SET Device_Status = 0,Sockets = ''";
                    IDataBase database = MySqlDataBase.getInstance();
                    database.Open();
                    database.ExcuteNonQuery(sql);
                    database.Close();

                    Console.WriteLine(ex.ToString());
                }
            }
        }
Example #11
0
        public static void Main()
        {
            try
            {
                Console.WriteLine("TcpSvr is beginning to start...");

                myTcpServer tts = new myTcpServer();
                TcpSvr      svr = new TcpSvr(8848, 1024, new Coder(Coder.EncodingMothord.Default));

                svr.Resovlver = new DatagramResolver("]}");
                //处理客户端连接数已满事件
                svr.ServerFull += new NetEvent(tts.ServerFull);
                //处理新客户端连接事件
                svr.ClientConn += new NetEvent(tts.ClientConn);
                //处理客户端关闭事件
                svr.ClientClose += new NetEvent(tts.ClientClose);
                //处理接收到数据事件
                svr.RecvData += new NetEvent(tts.RecvData);

                while (true)
                {
                    Console.Write(">");
                    string cmd = Console.ReadLine();
                    //退出服务
                    if (cmd.ToLower() == "exit")
                    {
                        break;
                    }
                    //暂停服务
                    if (cmd.ToLower() == "stop")
                    {
                        svr.Stop();
                        Console.WriteLine("Server is Stop.");
                        continue;
                    }
                    //开启服务
                    if (cmd.ToLower() == "start")
                    {
                        svr.Start();
                        Console.WriteLine("Server is listen...{0}", svr.ServerSocket.LocalEndPoint.ToString());
                        continue;
                    }
                    //连接数
                    if (cmd.ToLower() == "count")
                    {
                        Console.WriteLine("Current count of Client is {0}/{1}", svr.SessionCount, svr.Capacity);
                        continue;
                    }
                    //发送数据到客户端格式:send [Session] [stringData]
                    if (cmd.ToLower().IndexOf("send") != -1)
                    {
                        cmd = cmd.ToLower();
                        string[] para = cmd.Split(' ');
                        if (para.Length == 3)
                        {
                            Session client = (Session)svr.SessionTable[new SessionId(int.Parse(para[1]))];

                            if (client != null)
                            {
                                svr.Send(client, para[2]);
                            }
                            else
                            {
                                Console.WriteLine("The Session is Null");
                            }
                        }
                        else
                        {
                            Console.WriteLine("Error Command");
                        }

                        continue;
                    }

                    //从服务器上踢掉一个客户端 格式: kick [Session]
                    if (cmd.ToLower().IndexOf("kick") != -1)
                    {
                        cmd = cmd.ToLower();

                        string[] para = cmd.Split(' ');

                        if (para.Length == 2)
                        {
                            Session client = (Session)svr.SessionTable[new SessionId(int.Parse(para[1]))];

                            if (client != null)
                            {
                                svr.CloseSession(client);
                            }
                            else
                            {
                                Console.WriteLine("The Session is Null");
                            }
                        }
                        else
                        {
                            Console.WriteLine("Error command");
                        }

                        continue;
                    }

                    //列出服务器上所有的客户端信息
                    if (cmd.ToLower() == "list")
                    {
                        int i = 0;

                        foreach (Session Client in svr.SessionTable.Values)
                        {
                            if (Client != null)
                            {
                                i++;
                                string info = string.Format("{0} Client:{1} connected server Session:{2}. Socket Handle:{3}",
                                                            i,
                                                            Client.ClientSocket.RemoteEndPoint.ToString(),
                                                            Client.ID,
                                                            Client.ClientSocket.Handle);

                                Console.WriteLine(info);
                            }
                            else
                            {
                                i++;
                                string info = string.Format("{0} null Client", i);
                                Console.WriteLine(info);
                            }
                        }
                        continue;
                    }
                    if (cmd.ToLower() == "reset")
                    {
                        continue;
                    }
                    Console.WriteLine("Unkown Command");
                }//end of while

                Console.WriteLine("End service");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
Example #12
0
        /// <summary>
        /// 窗体初始化,包括配置数据文件
        /// </summary>
        private void formInit()
        {
            try
            {
                string gssipStr   = "";
                string gssportStr = "";
                //配置SQLITE文件
                PubConstant.SqliteConnStr = Application.StartupPath;
                string  sqlstr = "SELECT * FROM GSSCONFIG WHERE ID=1";
                DataSet ds     = DbHelperSQLite.Query(sqlstr);
                if (ds != null && ds.Tables[0] != null && ds.Tables[0].Rows != null)
                {
                    gssipStr   = ds.Tables[0].Rows[0]["GSSIP"].ToString().Trim();
                    gssportStr = ds.Tables[0].Rows[0]["GSSPORT"].ToString().Trim();
                }
                string.Format("ip:[{0}],port:[{1}]", gssipStr, gssportStr).Logger();
                if (gssipStr.Length > 0 && gssportStr.Length > 0)
                {
                    tGSSip.Text         = gssipStr;
                    tGSSport.Text       = gssportStr;
                    ShareData.LocalIp   = gssipStr;
                    ShareData.LocalPort = Convert.ToInt16(gssportStr);


                    //-------服务端通讯相关---------
                    IPAddress svripaddr = IPAddress.Parse(gssipStr);
                    ushort    uPort     = ushort.Parse(gssportStr);
                    svr           = new TcpSvr(svripaddr, uPort, 1024, new Coder(Coder.EncodingMothord.Default));
                    svr.Resovlver = new DatagramResolver("]$}");
                    //处理客户端连接数已满事件
                    svr.ServerFull += new NetEvent(this.ServerFull);
                    //处理新客户端连接事件
                    svr.ClientConn += new NetEvent(this.ClientConn);
                    //处理客户端关闭事件
                    svr.ClientClose += new NetEvent(this.ClientClose);
                    //处理接收到数据事件
                    svr.RecvData += new NetEvent(this.RecvData);
                    string Sstate = string.Format("{0}/{1}", svr.SessionCount, svr.Capacity);
                    lblServState.Text = Sstate;
                    //服务对客户端请求的处理实例
                    svrhandle = new ServerHandle(svr);

                    //日志记录
                    ShareData.Log.Info("GSS系统网络初始化" + gssipStr + ":" + gssportStr);

                    //开机自启动
                    string runstr = "";
                    try
                    {
                        RegistryKey ms_run = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
                        if (ms_run.GetValue("ShenLongYouSoft") != null)
                        {
                            runstr = ms_run.GetValue("ShenLongYouSoft").ToString();
                        }
                        timer1.Enabled = true;
                    }
                    catch (System.Exception ex)
                    {
                        ex.ToString().ErrorLogger();
                        ShareData.Log.Error("注册表查询失败", ex);
                    }


                    if (runstr.Trim().Length > 0)
                    {
                        checkBox1.Checked = true;
                        ServStart();
                    }
                }
                else
                {
                    FormServConfig form2 = new FormServConfig();
                    form2.ShowDialog();
                    Application.Restart();
                }
            }
            catch (System.Exception ex)
            {
                ex.ToString().ErrorLogger();
                MessageBox.Show("GSS初始化失败!\r\n" + ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
                //日志记录
                ShareData.Log.Error("GSS初始化失败", ex);
                timer1.Enabled = false;
            }
        }
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void RecvData(object sender, NetEventArgs e)
        {
            //  string info = string.Format("recv data:{0} from:{1}.", e.Client.Datagram, e.Client);
            TcpSvr svr = (TcpSvr)sender;

            byte[] recivebuffer = System.Text.Encoding.UTF8.GetBytes(e.Client.Datagram);
            byte[] buffer       = new byte[MsgHeadLength];
            Array.Copy(recivebuffer, 1, buffer, 0, MsgHeadLength);
            TastInfo Info     = new TastInfo();
            MSGHEAD  head     = new MSGHEAD();
            object   headType = head;

            Info.ByteArrayToStructureEndian(buffer, ref headType, 0);
            head = (MSGHEAD)headType;
            string centercode = head.Msg_GNSSCenter.ToString();

            switch (head.Msg_ID)
            {
            //用于心跳监测
            case 03:
                svr.SendMessage(e.Client, "", 0x0004, centercode);
                // svr.SendMessage(e.Client, "", 0x0003, centercode);
                break;
            //检测结果上传消息
            //TEST NUM	4	Unint32_t	结果个数
            //TEST INFO	804	Octet_string	检测结果信息

            case 06:
                byte[] test_num = new byte[4];
                Array.Copy(recivebuffer, MsgHeadLength + 1, test_num, 0, 4);
                Array.Reverse(test_num);

                UInt32 num     = (UInt32)BitConverter.ToInt32(test_num, 0);
                byte[] buffer3 = new byte[head.Msg_Length - 18 - 4];
                Array.Copy(recivebuffer, MsgHeadLength + 1 + 4, buffer3, 0, head.Msg_Length - 18 - 4);
                DETECTION_INFO detInfo     = new DETECTION_INFO();
                object         detInfoType = detInfo;

                Info.ByteArrayToStructureEndian(buffer3, ref detInfoType, 0);
                detInfo = (DETECTION_INFO)detInfoType;

//                     DataTable tbInfo = LoadDetectionInfo();
//                     DataSet ds = new DataSet();
//
//                     DataRow r = tbInfo.NewRow();
//                     r["p_name"] = System.Text.Encoding.UTF8.GetString(detInfo.p_name, 0, GetLen(detInfo.p_name)).Trim();
//                     r["sample_name"] = System.Text.Encoding.UTF8.GetString(detInfo.sample_name,0,GetLen(detInfo.sample_name)).Trim();
//                     r["channel"] = detInfo.channel;
//                     r["type"] = System.Text.Encoding.UTF8.GetString(detInfo.type, 0, GetLen(detInfo.type));
//                     r["standard"] = System.Text.Encoding.UTF8.GetString(detInfo.standard, 0, GetLen(detInfo.standard));
//                     r["sample_no"] = System.Text.Encoding.UTF8.GetString(detInfo.sample_no, 0, GetLen(detInfo.sample_no)).Trim();
//                     r["sites"] = System.Text.Encoding.UTF8.GetString(detInfo.sites, 0, GetLen(detInfo.sites)).Trim();
//                     r["submission_unit"] = System.Text.Encoding.UTF8.GetString(detInfo.submission_unit, 0, GetLen(detInfo.submission_unit));
//                     r["test_operator"] = System.Text.Encoding.UTF8.GetString(detInfo.test_operator, 0, GetLen(detInfo.test_operator));
//
//                     r["test_unit"] = System.Text.Encoding.UTF8.GetString(detInfo.test_unit, 0, GetLen(detInfo.test_unit));
//                     r["test_time"] = System.Text.Encoding.UTF8.GetString(detInfo.test_time, 0, GetLen(detInfo.test_time));
//
//                     r["User_Id"] = e.Client.UserId;
//
//                     //并将数据写入到数据库
//                     tbInfo.Rows.Add(r);

                string   p_name          = System.Text.Encoding.UTF8.GetString(detInfo.p_name, 0, GetLen(detInfo.p_name)).Trim();
                string   sample_name     = System.Text.Encoding.UTF8.GetString(detInfo.sample_name, 0, GetLen(detInfo.sample_name)).Trim();
                int      channel         = (int)detInfo.channel;
                string   type            = System.Text.Encoding.UTF8.GetString(detInfo.type, 0, GetLen(detInfo.type));
                string   standard        = System.Text.Encoding.UTF8.GetString(detInfo.standard, 0, GetLen(detInfo.standard));
                string   sample_no       = System.Text.Encoding.UTF8.GetString(detInfo.sample_no, 0, GetLen(detInfo.sample_no)).Trim();
                string   sites           = System.Text.Encoding.UTF8.GetString(detInfo.sites, 0, GetLen(detInfo.sites)).Trim();
                string   submission_unit = System.Text.Encoding.UTF8.GetString(detInfo.submission_unit, 0, GetLen(detInfo.submission_unit));
                string   test_operator   = System.Text.Encoding.UTF8.GetString(detInfo.test_operator, 0, GetLen(detInfo.test_operator));
                string   test_unit       = System.Text.Encoding.UTF8.GetString(detInfo.test_unit, 0, GetLen(detInfo.test_unit));
                string   test_time       = System.Text.Encoding.UTF8.GetString(detInfo.test_time, 0, GetLen(detInfo.test_time));
                DateTime dt      = DateTime.ParseExact(test_time, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
                int      User_Id = (int)e.Client.UserId;
                string   strsql  = "Insert Into " +
                                   "detectioninfo(p_name,sample_name,channel,type,standard,sample_no,sites,submission_unit,test_operator,test_unit,test_time,User_Id)"
                                   + "values('" + p_name + "','" + sample_name + "'," + channel + ",'" + type + "','" + standard + "','" + sample_no + "','" + sites + "','" + submission_unit + "','" + test_operator + "','" + test_unit + "','" + test_time + "'," + User_Id + ")";

                dbMySql.Open(databaseName);
                dbMySql.ExcuteNonQuery(databaseName, strsql);
                dbMySql.Close(databaseName);

                break;

            case 09:
                //视频上传
                svr.SendMessage(e.Client, 0, 0x000a, centercode);
                break;

            case 0x000e:
                //远程状态和工作参数查询应答消息
                //具体参数不明确
                break;


            default:
                break;
            }


            //测试把收到的数据返回给客户端
            //svr.SendText(e.Client, e.Client.Datagram);
            //MessageBox.Show(message.ToString());


            //svr.SendFile(this.textBox1.Text);
        }