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

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
        }
        //监听控制器
    }
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值