/// <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)); }
/// <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(); }
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; }
/// <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(); }
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 }
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); } }
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; } }
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); }
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; } }
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()); } } }
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()); } }
/// <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); }