C# Modbus Tcp实现(一)

 类CSocketClient主要包括以下内容:

复制代码
        private TcpClient _client;

        public Thread _connectionThread;

        private StreamWriter _write;

       public ClientRecMsgClass GClientRecMsgClass1 = new ClientRecMsgClass();

        private string hostname = Dns.GetHostName();


        private string recMessage = "";
        public string RecMessage
        {
            get { return recMessage; }
            set { recMessage = value; }
        }

        private int port = 0;
        public int Port
        {
            get { return port; }
            set { port = value; }
        }

        private string ip = "";
        public string Ip
        {
            get { return ip; }
            set { ip = value; }
        }
复制代码
复制代码
        public CSocketClient(string ipAddress, int portNumber)
        {
            port = portNumber;
            ip = ipAddress;
            ConnectToServer();
        }
        public CSocketClient()
        {
        }
复制代码
复制代码
   public void ConnectToServer()
        {
            try
            {
                _connectionThread = new System.Threading.Thread(new ThreadStart(ReceiveDataFromServer));
                _connectionThread.IsBackground = true;
                _connectionThread.Priority = ThreadPriority.AboveNormal;
                _connectionThread.Name = "Handle Server";
                _connectionThread.Start();
            }
            catch (Exception ex)
            {
                //MessageBox.Show(this, ex.Message, "QuickBuild Client Sample");
            }
        }
复制代码
复制代码
        private void ReceiveDataFromServer()
        {
            try
            {
                _client = new TcpClient(ip, port);
            }
            catch (SocketException ex)
            {
                return;
            }

            NetworkStream netStream = null;

            try
            {
                netStream = _client.GetStream();
            }
            catch (Exception ex)
            {
                return;
            }
            if (netStream.CanRead)
            {
                try
                {
                    byte[] receiveBuffer = new byte[4096];
                    int bytesReceived;                    // Received byte count
                    while ((bytesReceived = netStream.Read(receiveBuffer, 0, receiveBuffer.Length)) > 0)
                    {
                        recMessage = Encoding.ASCII.GetString(receiveBuffer, 0, bytesReceived);

                       
复制代码
复制代码
                        GClientRecMsgClass1.ClientRecMsg1(GClientRecMsgClass1);

                        if (_write != null)
                            _write.Write(Encoding.ASCII.GetString(receiveBuffer, 0, bytesReceived));

                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

            StopClient();
        }
复制代码
复制代码
        private void StopClient()
        {

            if (_client != null)
            {
                _client.Close();

                _connectionThread.Join();
            }


        }
        private void UpdateGUI(string s)
        {

        }
复制代码
复制代码
        public void SendMsgToServer(string sendData)
        {
            try
            {
                byte[] buffer = Encoding.Default.GetBytes(sendData);
                try
                {
                    _client.Client.Send(buffer);
                }
                catch (Exception ex)
                {
                    throw ex;
                }

            }
            catch
            {

            }

        }
复制代码
复制代码
        public void SendMsgToServerByte(byte[] buffer)
        {
            try
            {
                try
                {
                    _client.Client.Send(buffer);
                }
                catch (Exception ex)
                {
                    throw ex;
                }

            }
            catch
            {

            }

        }
复制代码

客户端处理事件:

复制代码
    #region 客户端处理事件
    //声明客户端接收数据代理
    public delegate void ClientRecMsg(object o);
    //声明一个类
    public class ClientRecMsgClass
    {
        //声明一个事件
        public event ClientRecMsg ClientRecMsgEvent1;
        //定义一个方法调用事件
        public void ClientRecMsg1(object o)
        {
            if (ClientRecMsgEvent1 != null)
            {
                //调用事件的方法
                ClientRecMsgEvent1(o);
            }
        }
    }
    #endregion
复制代码

 

posted @   echo-efun  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示