实例介绍
【实例简介】
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace 充电桩测试软件 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void label10_Click(object sender, EventArgs e) { } TcpListener listener; delegate void SetTextCallBack(TextBox txt, string text); private void button1_Click(object sender, EventArgs e) { button1.Enabled = false; Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(textBox25.Text), Convert.ToInt32(textBox1.Text)); socket.Bind(endPoint); socket.Listen(10); Thread thread = new Thread(Listen); thread.IsBackground = true; thread.Start(socket); } public void SetControlTextInfo(string msg) { TextBox txtMsgInfo = new TextBox(); txtMsgInfo = textBox2; foreach (Control item in this.tabControl1.Controls) { if(item is TabPage) { TabPage tcItem = (TabPage)item; foreach (var tbItem in tcItem.Controls) { if (tbItem is TextBox) { TextBox txtItem = (TextBox)tbItem; if (txtItem.Tag != null) { if (msg.Contains(txtItem.Tag.ToString())&& txtItem.Tag.ToString()!="") { txtMsgInfo = txtItem; int startIndex = msg.IndexOf(txtItem.Tag.ToString()) 6; msg = msg.Substring(startIndex, (msg.Length - 6) - startIndex); StringBuilder sb = new StringBuilder(); string[] strInfo = msg.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); for (int i = strInfo.Length - 1; i >= 0; i--) { sb.Append(strInfo[i]); } msg = sb.ToString(); } } } } } } if (txtMsgInfo == textBox2) { SetText(textBox2, socketSend.RemoteEndPoint.ToString() ":" Environment.NewLine msg Environment.NewLine);//RemoteEndPoint获取socketSend终端的ip地址和端口号信息 // if(txtMsgInfo.Text.Contains("")) } else { SetText(txtMsgInfo, msg); } } Socket socketSend; Dictionary<string, Socket> SocketDic = new Dictionary<string, Socket>();//这个是为了 实现服务器端对多个客户端进行收发消息 名字对应连接 void Recive(object o)//监听等待进入的客户端 { socketSend = o as Socket; //线程要用object 然后转换成需要的类型 while (true) { byte[] buffer = new byte[1024 * 1024 * 2]; int r = socketSend.Receive(buffer); if (r == 0) break; StringBuilder strBuider = new StringBuilder(); for (int index = 0; index < r; index ) { strBuider.Append(((int)buffer[index]).ToString("X2") " "); } string msg = strBuider.ToString();// Encoding.Default.GetString(buffer, 0, r); // textBox26.Text = Environment.NewLine msg; // msg = Convert.ToString(msg, 16); if(msg.Contains("68 04 43 00 00 00")) { SendMsg("68 04 83 00 00 00"); } if (msg.Contains("68 01 02")) { SendMsg(msg); //byte[] bt = Encoding.Default.GetBytes(msg); //int count = socketSend.Send(bt); //if (count > 0) //{ // // int jihuoCount = socketSend.Send(bt_JiHuo); // //if (jihuoCount > 0) // //{ // // string strDateTime = TimeToCP56Time2a(DateTime.Now); // // byte[] bt_DateTime = Encoding.Default.GetBytes(strDateTime); // // int countTime = socketSend.Send(bt_DateTime); // //} //} } SetControlTextInfo(msg); } } void Listen(object o) //接受客户端传信息 { try { Socket socketWatch = o as Socket; while (true) { socketSend = socketWatch.Accept(); SetText(textBox2,socketSend.RemoteEndPoint.ToString() ":" " ok"); string name = socketSend.RemoteEndPoint.ToString(); SocketDic.Add(name, socketSend);//键值对传值 Thread thread = new Thread(Recive); foreach (var item in SocketDic) { if(item.Key.Contains("192.168.1.79")) { } } thread.IsBackground = true; thread.Start(socketSend); } } catch { } } public void SendMsg(string SendDate) { try { // byte[] buffer = new byte[1024 * 1024 * 2]; //byte[] buffer = Encoding.UTF8.GetBytes(SendDate); byte[] buffer = HexStringToByteArray(SendDate); socketSend.Send(buffer); //文本框转化byte的内容 ShowThing(DateTime.Now.ToString() "发送:" SendDate "成功" "\r\n"); // richTextBox1.Clear();//清空文本框 } catch { } } void ShowThing(string ss) { textBox26.AppendText(ss "\n"); } public void SetText(TextBox txt, string text) { try { if (txt.InvokeRequired) { SetTextCallBack d = new SetTextCallBack(SetText); this.Invoke(d, new object[] {txt,text }); } else { if (txt == textBox2) { txt.Text = DateTime.Now ":" Environment.NewLine "接收数据:" Environment.NewLine text Environment.NewLine; } else { txt.Clear(); txt.Text = text; } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } //读取格式前面是固定的 public string ReadTCPInfo = "68 FF FF FF FF 00 00 68 01 0A 00 01 00 00 00 00 00 00 00 "; Dictionary<string, string> dic = new Dictionary<string, string>(); //下面是读取的数据标识 private readonly string cdzNumber = "01 9F"; private readonly string zdjqNumber = "02 9F"; private readonly string cdzModel = "03 9F"; private readonly string txxy = "04 9F"; private readonly string APN = "05 9F"; private readonly string APNuser = "06 9F"; private readonly string APNPwd = "07 9F"; private readonly string ServerIp = "08 9F"; private readonly string ServerPort = "09 9F"; private readonly string Wangguan = "0A 9F"; private readonly string LoaclIp = "0B 9F"; private readonly string LoaclPort = "0C 9F"; private readonly string zwym = "0D 9F"; private readonly string MakAddress = "0E 9F"; private readonly string glyPwd = "20 9F"; private readonly string eddy = "10 9F"; private readonly string eddl = "11 9F"; private readonly string glbl = "12 9F"; private readonly string glhfbl = "13 9F"; private readonly string gybl = "14 9F"; private readonly string gyhfbl = "15 9F"; private readonly string qybl = "16 9F"; private readonly string qyhfbl = "17 9F"; private readonly string mindl = "18 9F"; private readonly string maxdl = "19 9F"; private readonly string pdTime = "21 9F"; private readonly string xtzq = "22 9F"; private readonly string LEDStartTime = "23 9F"; private readonly string LEDEndTime = "24 9F"; private readonly string OutTime = "25 9F"; private readonly string OutTimeCount = "26 9F"; private readonly string rjVerson = "30 9F"; private readonly string yjVerson = "31 9F"; private readonly string wifiInfo = "32 9F"; private readonly string cdStationNumber = "33 9F"; private readonly string jingdu = "34 9F"; private readonly string weidu = "35 9F"; private readonly string cdzType = "36 9F"; private readonly string zkb = "37 9F"; private readonly string cdfeilv = "38 9F"; private readonly string jiaoshi = "39 9F"; private readonly string ykfMonery = "3A 9F"; private readonly string dbxyzcs = "3B 9F"; private readonly string jfbflz = "3C 9F"; private readonly string dzcdkPwd = "3D 9F"; private readonly string cdzbh = "3E 9F";//于01一样 private readonly string dbAddress = "3F 9F"; private readonly string jfbgsdcs = "41 9F"; private readonly string zlzModeType = "42 9F"; private readonly string yjzkb = "43 9F"; private readonly string ewmAddress = "44 9F"; //结束标识 private readonly string EndFlag = " 16"; //CRC校验码获取 public static string CRCCalc(string data) { // int sum = 0; string[] str16 = data.Split(' '); for (int i = 0; i < str16.Length; i ) { sum = Convert.ToInt32(str16[i], 16); } int resInt = sum % 256; string res16 = Convert.ToString(resInt, 16).ToUpper(); return " " res16; } public string GetSendMsg(string Code) { string CRC = CRCCalc(ReadTCPInfo Code); return ReadTCPInfo Code CRC EndFlag; } public string ss(string ReciveDate) { string s1 = ""; return s1; // return ip; } public TCPService service = new TCPService(); public Dictionary<string, string> dicCodeToNumber = new Dictionary<string, string>(); private void Form1_Load(object sender, EventArgs e) { service.funcRecive = ss; Control.CheckForIllegalCrossThreadCalls = false; dicCodeToNumber.Add("30 9F", "10 00"); dicCodeToNumber.Add("31 9F", "12 00"); dicCodeToNumber.Add("01 9F", "14 00"); dicCodeToNumber.Add("02 9F", "16 00"); dicCodeToNumber.Add("36 9F", "18 00"); dicCodeToNumber.Add("33 9F", "1A 00"); dicCodeToNumber.Add("37 9F", "1C 00"); dicCodeToNumber.Add("3A 9F", "1E 00"); dicCodeToNumber.Add("38 9F", "20 00"); dicCodeToNumber.Add("3C 9F", "22 00"); dicCodeToNumber.Add("08 9F", "28 00"); dicCodeToNumber.Add("09 9F", "2A 00"); dicCodeToNumber.Add("0B 9F", "2C 00"); dicCodeToNumber.Add("0D 9F", "2E 00"); dicCodeToNumber.Add("0A 9F", "30 00"); dicCodeToNumber.Add("0E 9F", "32 00"); dicCodeToNumber.Add("0C 9F", "34 00"); dicCodeToNumber.Add("04 9F", "36 00"); // dicCodeToNumber.Add("39 9F", "");//校正时间 dicCodeToNumber.Add("41 9F", "3C 00"); dicCodeToNumber.Add("10 9F", "3E 00"); dicCodeToNumber.Add("11 9F", "40 00"); dicCodeToNumber.Add("12 9F", "42 00"); dicCodeToNumber.Add("13 9F", "44 00"); dicCodeToNumber.Add("14 9F", "46 00"); dicCodeToNumber.Add("15 9F", "48 00"); dicCodeToNumber.Add("16 9F", "4A 00"); dicCodeToNumber.Add("17 9F", "4C 00"); dicCodeToNumber.Add("18 9F", "4E 00"); dicCodeToNumber.Add("19 9F", "50 00"); dicCodeToNumber.Add("21 9F", "52 00"); dicCodeToNumber.Add("34 9F", "54 00"); dicCodeToNumber.Add("35 9F", "56 00"); dicCodeToNumber.Add("22 9F", "58 00"); dicCodeToNumber.Add("23 9F", "5A 00"); dicCodeToNumber.Add("24 9F", "5C 00"); dicCodeToNumber.Add("43 9F", "5E 00"); dicCodeToNumber.Add("25 9F", "60 00"); dicCodeToNumber.Add("26 9F", "62 00"); dicCodeToNumber.Add("05 9F", "64 00"); dicCodeToNumber.Add("06 9F", "66 00"); dicCodeToNumber.Add("07 9F", "68 00"); dicCodeToNumber.Add("20 9F", "6A 00"); } private string strFont = "68 22 "; private string strEnd = "00 00 6A 01 06 00 00 00 00 "; private void button41_Click(object sender, EventArgs e) { Button btnSend = sender as Button; if(btnSend.Tag!=null) { SendMsg(strFont dicCodeToNumber[btnSend.Tag.ToString()] strEnd GetSendMsg(btnSend.Tag.ToString())); } } //写入格式前面是固定的 public string WriteTCPInfo = "68 FF FF FF FF 00 00 68 08 "; private void button11_Click(object sender, EventArgs e) { } public string TimeToCP56Time2a(DateTime dt) { StringBuilder sb = new StringBuilder(); int m = dt.Millisecond 1000 * dt.Second; sb.Append((m & 0xFF).ToString("X2") " "); sb.Append(((m & 0xFF00) >> 8).ToString("X2") " "); sb.Append((dt.Minute & 0x00FF).ToString("X2") " "); // add valid flag and genuine flag sb.Append((dt.Hour & 0x00FF).ToString("X2") " "); // add summer flag sb.Append(((((int)dt.DayOfWeek % 7) & 0x03) << 5 | (dt.Day & 0x1F)).ToString("X2") " "); sb.Append((dt.Month & 0x0F).ToString("X2") " "); sb.Append((dt.Year - 2000).ToString("X2") " "); return sb.ToString(); } private void button72_Click(object sender, EventArgs e) { service.StartService("192.168.1.79", 9995); //string ss= TimeToCP56Time2a(DateTime.Now); } private void button73_Click(object sender, EventArgs e) { SendMsg("68 04 07 00 00 00"); //string strJiHuo = "68 04 07 00 00 00"; //textBox26.Text = Environment.NewLine strJiHuo; //byte[] bt_JiHuo = Encoding.Default.GetBytes(strJiHuo); //int jihuoCount = socketSend.Send(bt_JiHuo); } private void button78_Click(object sender, EventArgs e) { string strDateTime = TimeToCP56Time2a(DateTime.Now); string TimeInfo = "68 12 00 00 02 00 67 01 07 00 00 00 00 " strDateTime; SendMsg(TimeInfo); //textBox26.Text = Environment.NewLine TimeInfo; //byte[] bt_DateTime = Encoding.Default.GetBytes(TimeInfo); //int countTime = socketSend.Send(bt_DateTime); } public static byte[] HexStringToByteArray(string s) { s = s.Replace(" ", ""); byte[] buffer = new byte[s.Length / 2]; for (int i = 0; i < s.Length; i = 2) buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16); return buffer; } } }
好例子网口号:伸出你的我的手 — 分享!
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论