/// <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); }
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); }
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 + "),等待维护线程重连"); } } }
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); }
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); } } }
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)); }
/// <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(); } }
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 }
private static bool ReConnect(TcpCli tc) { try { tc.Connect(); Thread.Sleep(4000); if (tc.IsConnected) { return(true); } else { return(false); } } catch { return(false); } }
/// <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; }
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); } }
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()); } }
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); } }