- 转载连接: https://blog.youkuaiyun.com/li_ser/article/details/52681353
- 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
- }
- //监听控制器
- }