C# 监听串口数据并触发事件

来源:互联网 发布:单片机为什么需要复位 编辑:程序博客网 时间:2024/06/05 07:48
using System;using System.Text;using System.Net;using System.Net.Sockets;namespace HtTcp{    public delegate void ITCPAcsEvents_OnEventEventHandler(string _Type, string _ReturnValue);    public class HtTcpAcs    {        public event ITCPAcsEvents_OnEventEventHandler OnEvent;                      public HtTcpAcs()        {        }        public void HtTcpAcsx(string IpAddress,int IpPorts)        {            Socket serverSocket;            IPEndPoint ephost = new IPEndPoint(IPAddress.Parse(IpAddress), IpPorts);            serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            #region 发送接收            try            {                int counter = 0;                string retrunValue = "";                string retrunType = "";                serverSocket.Connect(ephost);                while (true)                {                    //接收的消息 暂定获取1M数据                    Byte[] recvBytes = new Byte[2048];                    Int32 bytes = serverSocket.Receive(recvBytes, recvBytes.Length, SocketFlags.None);                    string msg = TcpDataHelp.ToHexString(recvBytes, recvBytes.Length).ToUpper();                    //截取有效帧数据                    int i = msg.IndexOf("3A") + 2;                    int j = msg.IndexOf("0D0A");                    string strred = msg.Substring(i, j - i);                    string strxy = strred.Substring(0, strred.Length - 2);                    string strbd = strred.Substring(strred.Length - 2, 2);                    if (TcpValidate.CheckSumgz(strxy) == strbd)                    {                        //获取编码                        string funCode = strxy.Substring(2, 2);                        //判断编码 区分数据解析函数                        switch (funCode)                        {                             retrunValue = Convert.ToInt64(strxy.Substring(4, strxy.Length - 4), 16).ToString();                        }                        if (OnEvent!=null)                        {                            OnEvent(funCode, retrunValue);                        }                    }                    //Thread.Sleep(100);                }            }            catch (Exception ex)            {
                MessageBox.Show(<span style="font-family: Arial, Helvetica, sans-serif;">"连接/发送/接收过程中,发生了错误!\r\n"</span><span style="font-family: Arial, Helvetica, sans-serif;">)</span>
            }            finally            {                serverSocket.Close();            }            #endregion        }        //监听控制器    }}

0 0