您的位置:首页 > 编程语言 > C#

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

2016-09-27 15:46 302 查看
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
}
//监听控制器
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息