public int Send(MessageType type, string text) { try { int res = FAIRED; switch (type) { case MessageType.msg: case MessageType.reStart: case MessageType.disConnect: case MessageType.arrived: case MessageType.move: case MessageType.none: List <byte> list = new List <byte>(); list.Add((byte)type); list.AddRange(Encoding.UTF8.GetBytes(text)); _client.Send(list.ToArray()); return(SUCCESS); case MessageType.AgvFile: case MessageType.mapFile: res = SendFile(text, (byte)type); return(SUCCESS); default: OnMessageEvent("错误的消息类型"); return(FAIRED); } } catch (Exception ex) { OnMessageEvent("发送失败:" + ex); return(FAIRED); } }
public void Send(string cmdText) { var cmdbytes = new GetDataCommand(cmdText).GetCommandBytes(); if (Client != null) { Client.Send(cmdbytes); } }
public void Send(byte[] data) { if (!IsConnected) { throw new InvalidOperationException("The client has not connected to server."); } _client.Send(data); }
void StartWaitSendThread(TcpSocketClient client) { //开启线程读取上次未发送的消息 ThreadPool.QueueUserWorkItem((obj) => { var spNumber = spClientPool.First(i => i.Socket == client).SPNumber; //读取为发送的消息 var deliverDao = StorageProvider <DeliverStorage> .GetStorage(); var deliverList = deliverDao.GetList(spNumber); if (deliverList.Count() > 0) { foreach (var deliver in deliverList) { var d = new Deliver { SPNumber = deliver.SPNumber, UserNumber = deliver.UserNumber, TP_pid = 0, TP_udhi = 0, MessageCoding = MessageCodes.GBK, MessageContent = deliver.Content }; client.Send(d.GetBytes()); //映射序列号 MapSequeue(d.SequenceNumberString, deliver.SequenceNumber); } } //读取上次未发送的报告 var reportDao = StorageProvider <ReportStorage> .GetStorage(); var reportList = reportDao.GetList(spNumber); if (reportList.Count() > 0) { foreach (var report in reportList) { var r = new Report { SubmitSequenceNumber = report.TargetSubmitSequenceNumber, ReportType = (uint)report.ReportType, State = (uint)report.State, ErrorCode = (uint)report.ErrorCode, UserNumber = report.UserNumber }; client.Send(r.GetBytes()); //映射序列号 MapSequeue(r.SequenceNumberString, report.SubmitSequenceNumber); } } }); }
static void Main(string[] args) { TcpSocketClient client = new TcpSocketClient(); client.PacketRecieved += (e) => { using (PacketReader pr = new PacketReader(e.Data)) { Headers Header = (Headers)pr.ReadByte(); switch (Header) { case Headers.Login: string user = pr.ReadString(); int id = pr.ReadInt32(); Console.Title = $"User {user} logged in ID {id} "; break; case Headers.Register: break; case Headers.Chat: int iduser = pr.ReadInt32(); string chat = pr.ReadString(); Console.Title = $"User {iduser} said {chat} "; break; default: break; } } }; client.Connect("127.0.0.1", 9090); Thread.Sleep(1000); Random r = new Random(); using (PacketWriter pw = new PacketWriter()) { pw.Write((byte)Headers.Login); pw.Write("TestUser" + r.Next()); client.Send(pw.Data); } while (true) { string input = Console.ReadLine(); using (PacketWriter pw = new PacketWriter()) { pw.Write((byte)Headers.Chat); pw.Write(input); client.Send(pw.Data); } } }
void DeliverHandler(TcpSocketClient client, Deliver deliver) { var resp = new Deliver_Resp { SequenceNumber = deliver.SequenceNumber, Result = CommandError.Success }; client.Send(resp.GetBytes()); //将seq设置为SMG的seq deliver.SequenceNumber = Sequence.Next(); //插入手机发送的Deliver消息到数据库 var mDeliver = new MDeliver { SequenceNumber = deliver.SequenceNumberString, TargetSequenceNumber = deliver.SequenceNumber, SPNumber = deliver.SPNumber, UserNumber = deliver.UserNumber, Content = deliver.MessageContent, Created = DateTime.Now, Status = 0 }; StorageProvider <DeliverStorage> .GetStorage().Insert(mDeliver); //转发给消息中心处理 MessageCenter.GetInstance().Commit(deliver); }
void StartWaitSendThread(TcpSocketClient client) { //开启线程读取上次未发送的消息 ThreadPool.QueueUserWorkItem((obj) => { var userNumber = mtClientPool.First(i => i.Socket == client).UserNumber; var dao = StorageProvider <SubmitStorage> .GetStorage(); var list = dao.GetList(userNumber); if (list.Count() > 0) { foreach (var submit in list) { var d = new Deliver { SPNumber = submit.SPNumber, UserNumber = submit.UserNumber, TP_pid = 0, TP_udhi = 0, MessageCoding = MessageCodes.GBK, MessageContent = submit.Content }; client.Send(d.GetBytes()); //映射序列号 MapSequeue(d.SequenceNumberString, submit.SequenceNumber); } } }); }
private void Write(string v) { if (_socket != null) { _socket.Send(System.Text.Encoding.UTF8.GetBytes(v)); } }
private void tcpSend(byte[] sendData) { if (_client.State == TcpSocketConnectionState.Connected) { _client.Send(sendData);//Encoding.ASCII.GetBytes(input) } }
void OnConnected(TcpSocketClient client) { client.Start(); ThreadCalls(() => { client.Send(new Bind() { SequenceNumber = Sequence.Next(), LoginType = LoginTypes.SPToSMG, LoginName = cbbSPNumber.Text, LoginPassword = cbbSPNumber.Text }.GetBytes()); cbbSPNumber.Enabled = false; cbbSMGIP.Enabled = false; nudSMGPort.Enabled = false; btnStart.Enabled = false; btnStop.Enabled = true; btnSend.Enabled = true; lbStatus.Text = "已连接"; lbAddress.Text = client.LocalIPAddress; this.Text = cbbSPNumber.Text; }); }
static void SocketTest() { int count = 1000; int port = 11111; Stopwatch watch = new Stopwatch(); TcpSocketServer server = new TcpSocketServer(port); server.HandleRecMsg = (a, b, c) => { b.Send(c); }; server.StartServer(); watch.Start(); LoopHelper.Loop(count, () => { //AutoResetEvent waitEvent = new AutoResetEvent(false); TcpSocketClient tcpSocketClient = new TcpSocketClient(port); tcpSocketClient.HandleRecMsg = (a, b) => { Console.WriteLine($"收到时间:{DateTime.Now.ToString("HH:mm:ss:ffffff")}"); //waitEvent.Set(); }; tcpSocketClient.StartClient(); Console.WriteLine($"发送时间:{DateTime.Now.ToString("HH:mm:ss:ffffff")}"); tcpSocketClient.Send(new byte[] { 0X01 }); //waitEvent.WaitOne(); Thread.Sleep(1000); }); watch.Stop(); Console.WriteLine($"每次耗时:{(double)watch.ElapsedMilliseconds / count}ms"); }
void SubmitHandler(TcpSocketClient client, Submit submit) { var resp = new Submit_Resp { SequenceNumber = submit.SequenceNumber, Result = CommandError.Success }; client.Send(resp.GetBytes()); //添加SP发送的Submit消息到数据库 var mSubmit = new MSubmit { TargetSequenceNumber = submit.SequenceNumber, SequenceNumber = submit.SequenceNumberString, SPNumber = submit.SPNumber, UserNumber = submit.UserNumber, ReportFlag = (int)submit.ReportFlag, Content = submit.MessageContent, Created = DateTime.Now, Status = 0 }; StorageProvider <SubmitStorage> .GetStorage().Insert(mSubmit); //转发给消息中心处理 MessageCenter.GetInstance().Commit(submit); }
static void Main(string[] args) { NLogLogger.Use(); ConnectToServer(); Console.WriteLine("TCP client has connected to server."); Console.WriteLine("Type something to send to server..."); while (true) { try { string text = Console.ReadLine(); if (text == "quit") { break; } else if (text == "many") { text = new string('x', 8192); for (int i = 0; i < 1000000; i++) { _client.Send(Encoding.UTF8.GetBytes(text)); } } else if (text == "big") { text = new string('x', 1024 * 1024 * 100); _client.Send(Encoding.UTF8.GetBytes(text)); } else { _client.Send(Encoding.UTF8.GetBytes(text)); } } catch (Exception ex) { Console.WriteLine(ex.Message); } } _client.Close(); Console.WriteLine("TCP client has disconnected from server."); Console.ReadKey(); }
void UnBindHandler(TcpSocketClient client, UnBind ubind) { var resp = new UnBind_Resp() { SequenceNumber = ubind.SequenceNumber }; client.Send(resp.GetBytes()); }
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { try { AutoResetEvent waitEvent = new AutoResetEvent(false); ResponseModel response = null; TcpSocketClient socketClient = new TcpSocketClient(ServerIp, ServerPort) { HandleRecMsg = (a, bytes) => { response = bytes.ToString(Encoding.UTF8).ToObject <ResponseModel>(); waitEvent.Set(); }, RecLength = 1024 * 1024, HandleException = new Action <Exception>(ex => { Console.WriteLine(ex.Message); }) }; bool started = socketClient.StartClient(); if (started) { RequestModel requestModel = new RequestModel { ServiceName = ServiceName, MethodName = binder.Name, Paramters = args.ToList() }; socketClient.Send(requestModel.ToJson().ToBytes(Encoding.UTF8)); waitEvent.WaitOne(new TimeSpan(0, 0, 5)); socketClient.Close(); } else { throw new Exception("连接到服务端失败!"); } if (response == null) { throw new Exception("服务器超时未响应"); } else if (response.Success) { result = response.Data.ToObject(ServiceType.GetMethod(binder.Name).ReturnType); return(true); } else { throw new Exception($"服务器异常,错误消息:{response.Msg}"); } } catch (Exception ex) { throw ex; } }
private void SendHeartbeat() { SocketError errorCode; while (true) { Thread.Sleep(heartbeatInterval); tcpClient.Send(heartbeatMsg.Packet, out errorCode); if (errorCode != SocketError.Success) { if (Interlocked.Exchange(ref tcpSocketState, -1) != -1) { tcpClient.ReconnectSocket(heartbeatMsg); } break; } } }
private void btnSend_Click(object sender, EventArgs e) { if (cbbSPNumber.Text == "" || rtbContent.Text == "") { return; } if (client != null) { client.Send(new Deliver { SequenceNumber = Sequence.Next(), SPNumber = cbbSPNumber.Text, MessageContent = rtbContent.Text, MessageCoding = MessageCodes.GBK, UserNumber = cbbNumber.Text, TP_pid = 0, TP_udhi = 0 }.GetBytes()); } }
private void Heartbeat(object obj) { try { if (Reconnectioned >= ReconnectionCount) { //重连熔断降级至24小时一次轮询 if (!downTag) { LogHelper.Logger.Error($"{ReconnectionCount}次重连失败,降级轮询频率至24小时一次"); PollingTimer.Change(24 * 60 * 60 * 1000, 24 * 60 * 60 * 1000); } return; } if (Client == null) { CreateTcpClient(); } if (Client.State == TcpSocketConnectionState.Connected) { Client.Send(Encoding.UTF8.GetBytes(CommandHandler.HeartBeatCmd())); Reconnectioned = 0; //恢复轮询正常状态 downTag = true; PollingTimer.Change(Polling.Value * 1000, Polling.Value * 1000); } else { Reconnectioned++; } } catch (Exception ex) { LogHelper.Logger.Error($"Heartbeat Error:" + ex.Message + ex.StackTrace); } }
private void btnSend_Click(object sender, EventArgs e) { if (cbbNumber.Text == "" || rtbContent.Text == "") { return; } if (client != null) { var submit = new Submit() { SPNumber = cbbSPNumber.Text, UserCount = 1, UserNumber = cbbNumber.Text, CorpId = "0591", ExpireTime = "", ScheduleTime = "", ServiceType = "test", FeeType = FeeTypes.SendFree, FeeValue = "000000", GivenValue = "000000", MessageCoding = MessageCodes.GBK, MessageType = 0, MorelatetoMTFlag = 0, TP_pid = 0, TP_udhi = 0, Priority = 1, ReportFlag = 0, MessageContent = rtbContent.Text, ChargeNumber = cbbSPNumber.Text, AgentFlag = 1, }; client.Send(submit.GetBytes()); } }
void BindHandler(TcpSocketClient client, Bind bind) { var resp = new Bind_Resp { SequenceNumber = bind.SequenceNumber, Result = CommandError.Success }; if (bind.LoginType != LoginTypes.SPToSMG) { resp.Result = CommandError.InvalidLoginType; } else { //todo auth if (bind.LoginName == "" || bind.LoginPassword == "") { resp.Result = CommandError.InvalidLogin; } else if (spClientPool.Count(i => i.SPNumber.Equals(bind.LoginName)) > 0) { resp.Result = CommandError.RepeatLogin; } else { //添加到连接池 spClientPool.Add(new SPClient { SPNumber = bind.LoginName, Socket = client }); } } client.Send(resp.GetBytes()); }
static void Main(string[] args) { ConnectServer(); Console.WriteLine("APM TCP client has connected to server."); Console.WriteLine("Type something to send to server..."); while (true) { try { string text = Console.ReadLine(); if (text == "quit") { break; } else if (text == "many") { text = new string('x', 8192); for (int i = 0; i < 1000000; i++) { _client.Send(Encoding.UTF8.GetBytes(text)); } } else if (text == "big1k") { text = new string('x', 1024 * 1); _client.Send(Encoding.UTF8.GetBytes(text)); } else if (text == "big10k") { text = new string('x', 1024 * 10); _client.Send(Encoding.UTF8.GetBytes(text)); } else if (text == "big100k") { text = new string('x', 1024 * 100); _client.Send(Encoding.UTF8.GetBytes(text)); } else if (text == "big1m") { text = new string('x', 1024 * 1024 * 1); _client.Send(Encoding.UTF8.GetBytes(text)); } else if (text == "big2m") { text = new string('x', 1024 * 1024 * 2); _client.Send(Encoding.UTF8.GetBytes(text)); } else if (text == "big5m") { text = new string('x', 1024 * 1024 * 5); _client.Send(Encoding.UTF8.GetBytes(text)); } else if (text == "big10m") { text = new string('x', 1024 * 1024 * 10); _client.Send(Encoding.UTF8.GetBytes(text)); } else if (text == "big20m") { text = new string('x', 1024 * 1024 * 20); _client.Send(Encoding.UTF8.GetBytes(text)); } else if (text == "big50m") { text = new string('x', 1024 * 1024 * 50); _client.Send(Encoding.UTF8.GetBytes(text)); } else if (text == "big100m") { text = new string('x', 1024 * 1024 * 100); _client.Send(Encoding.UTF8.GetBytes(text)); } else if (text == "big1g") { text = new string('x', 1024 * 1024 * 1024); _client.Send(Encoding.UTF8.GetBytes(text)); } else { _client.Send(Encoding.UTF8.GetBytes(text)); } } catch (Exception ex) { Console.WriteLine(ex.Message); } } _client.Shutdown(); Console.WriteLine("TCP client has disconnected from server."); Console.ReadKey(); }
void OnRead(TcpSocketClient client, byte[] buffers) { ThreadCalls(() => { try { var cmd = new BaseCommand(buffers); switch (cmd.Command) { case Commands.Bind_Resp: var bind_resp = new Bind_Resp(buffers); if (bind_resp.Result != CommandError.Success) { PrintLog("绑定验证失败:" + CommandError.GetMessage(bind_resp.Result)); Thread.Sleep(1000); client.Disconnect(); } break; case Commands.Deliver: var deliver = new Deliver(buffers); //新消息提醒 PrintLog("收到一条 " + deliver.UserNumber + " 发来的新消息!"); //绑定消息会话 BindSession(false, deliver.UserNumber, deliver.MessageContent); //发送响应 client.Send(new Deliver_Resp { SequenceNumber = deliver.SequenceNumber, Result = CommandError.Success }.GetBytes()); break; case Commands.Deliver_Resp: var deliver_resp = new Deliver_Resp(buffers); if (deliver_resp.Result != CommandError.Success) { PrintLog("传送消息失败:" + CommandError.GetMessage(deliver_resp.Result)); } break; case Commands.Report: client.Send(new Report_Resp { SequenceNumber = cmd.SequenceNumber, Result = CommandError.Success }.GetBytes()); break; default: break; } PrintLog("接收一条命令:" + Commands.GetString(cmd.Command)); } catch (Exception e) { PrintLog("读取消息出现错误: " + e.Message); } }); }
public void Send(BaseTransportMessage message) { _socketClient.Send(message); }
static void Main(string[] args) { //3C 04 0C AA 08 31 2E 33 35 32 2E 30 32 66 ED Console.WriteLine(DataHelper.ConvertToHexFromInt(10)); Console.WriteLine(DataHelper.ConvertToHexFromInt(269)); ConnectToServer(); Console.WriteLine("TCP客户端已连接到服务器"); Console.WriteLine("现在可以给服务器发送指令了"); while (true) { try { string text = Console.ReadLine(); if (text == "quit") { break; } else { if (string.IsNullOrEmpty(text)) { //获取温度湿度 250301FF0066已解析 //获取采集保存间隔250308DD0066已解析 //获取历史总包数历史总条数250306AA0066已解析待验证 //下载历史数据250306AA0201000066已解析待验证 //修改节点地址 //获取设备硬件软件版本号25080CAA0066 //设置设备地址25070255010B66 //读温度报警值上限下限25030A010066已解析 //读湿度报警值上限下限25030A020066已解析 //写温度报警值25030A01040A00DE0366 //写湿度报警值25030A0204C800700366 //读温湿度报警状态25030ABB0066 //读取保存间隔250308DD0066已解析 //设置保存间隔 写分钟 记录间隔 存储容量 //250308DD0305E80366 //设置保存间隔 写小时 //250308DD0401DC050066 //清空历史记录 //250309FF0066 //读取设备日期时间已解析 //250308CC0066 //设置时间 //250308BB0617071618303066 //开启温度报警25030AAA010166 //开启湿度报警25030AAA010266 //开启温湿度报警25030AAA010366 //关闭温湿度报警25030AAA010066 // text = "250F06AA0066"; text = "250401FF0066"; } var cmdbytes = new GetDataCommand(text).GetCommandBytes(); _client.Send(cmdbytes); } } catch (Exception ex) { Console.WriteLine(ex.Message); } } _client.Shutdown(); Console.WriteLine("TCP客户端已经从服务器断开了"); Console.ReadKey(); }
void OnRead(TcpSocketClient client, byte[] buffers) { ThreadCalls(() => { try { var cmd = new BaseCommand(buffers); switch (cmd.Command) { case Commands.Bind_Resp: var bind_resp = new Bind_Resp(buffers); if (bind_resp.Result != CommandError.Success) { PrintLog("绑定验证失败:" + CommandError.GetMessage(bind_resp.Result)); Thread.Sleep(1000); client.Disconnect(); } break; case Commands.Deliver: var deliver = new Deliver(buffers); //添加接收记录 var sms = new SMS { SPNumber = deliver.SPNumber, UserNumber = deliver.UserNumber, Content = deliver.MessageContent, Time = DateTime.Now, Type = SMSTypes.RECEIVE }; SMSHistory.Add(sms); //绑定会话组 BindGroup(deliver.SPNumber); //绑定会话 if (lbGroup.SelectedItem != null && lbGroup.SelectedItem.ToString() == sms.SPNumber) { BindSession(sms); } else { lbGroup.SelectedItem = deliver.SPNumber; BindSession(deliver.SPNumber); } //新消息提醒 PrintLog("收到一条 " + sms.SPNumber + " 发来的新消息!"); //发送响应 client.Send(new Deliver_Resp { SequenceNumber = deliver.SequenceNumber, Result = CommandError.Success }.GetBytes()); break; case Commands.Deliver_Resp: var deliver_resp = new Deliver_Resp(buffers); if (deliver_resp.Result != CommandError.Success) { PrintLog("传送消息失败:" + CommandError.GetMessage(deliver_resp.Result)); } break; default: break; } PrintLog("接收一条命令:" + Commands.GetString(cmd.Command)); } catch (Exception e) { PrintLog("读取消息出现错误: " + e.Message); } }); }