首页 > 编程语言 >C# Modbus Tcp实现(一)

C# Modbus Tcp实现(一)

时间:2024-09-29 17:24:00浏览次数:7  
标签:try string C# void private Modbus Tcp public ex

 类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

 

标签:try,string,C#,void,private,Modbus,Tcp,public,ex
From: https://www.cnblogs.com/echo-efun/p/18439146

相关文章

  • Star 3w+,向更安全、更泛化、更云原生的 Nacos3.0 演进
    作者:席翁Nacos社区刚刚迎来了Star突破30000的里程碑,从此迈上了一个新的阶段。感谢大家的一路支持、信任和帮助!Nacos /nɑ:kəʊs/是Dynamic Namingand Configuration Service的首字母简称,定位于一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。......
  • Capital许可证分配策略
    随着企业对于软件依赖的加深,Capital许可证的分配成为了一个需要细致考虑的重要环节。为了确保软件合规使用、优化资源配置,并提高运营效率,本文将提供关于Capital许可证分配策略的具体建议和实施步骤。一、核心建议1.了解许可条款:在分配之前,务必详细阅读并理解Capital许可证的条款......
  • 视频格式转换 CoolUtils Total Movie Converter v4.1 中文授权版
    CoolUtilsTotalMovieConverter 是一款适用于PC端的视频格式转换软件,支持转换几乎所有常见的视频格式。无论你需要将视频转换为AVI、FLV、MPG、WMV、MPEG等格式,还是想将视频优化用于XBox、iPhone、iPad等设备,这款工具都能帮你实现。新版添加了“VideoToDevice”功能,确......
  • ImageMagick安装
    安装ImageMagick先安装一些依赖yuminstalllibjpegyuminstalllibjpeg-develyuminstalllibpngyuminstalllibpng-develyuminstalllibtiffyuminstalllibtiff-develyuminstalllibungifyuminstalllibungif-develyuminstallfreetypeyuminstallzlib......
  • Excel:常用函数
    一、DAYS(返回两个日期之间的天数)以下演示是在windows操作系统环境,office软件进行操作的1.1单元格设置日期格式1.2设置Days函数公式:=DAYS(C2,B2)全部天数二、SUM(求和)公式:=SUM(B2:C2)三、SUMIFS(多条件求和)3.1统计销售部报销金额公式:=SUMIFS(D:D......
  • 从Anaconda到PyTorch到训练Yolo——Windows系统
    1、Anacondaconda能管理不同的开发编译环境,互补干涉影响。Anaconda和Miniconda是conda的工具,前者带界面(大而全),后者只有命令行窗口(小而精)。作为初学,建议安装Anaconda1.1安装Anaconda下载 DownloadAnacondaDistribution|Anaconda ,安装到D盘,其他默认。 1.2更换源 ......
  • COMM5000 Data Literacy
    COMM5000DataLiteracyCaseStudyProjectMilestone1InformationTerm3,2024CaseStudyInformationBusinesscontext:Inrecentyears,thegrowinginterestinwinehasfuelledtheexpansionofthewineindustry.Asaresult,companiesareinvestinginnew......
  • 9月28日,工信部人才交流中心&CUUG-PGCA/PGCP/PGCM认证考试完成!
    2024年9月28日,由工业和信息化部人才交流中心主办,北京神脑资讯技术有限公司承办的PostgreSQL管理员岗位能力认证考试(PGCP中级/PGCM高级)顺利完成。中级PG认证专家:PGCP(PostgreSQLCertifiedProfessional),是对PostgreSQL数据库技术能力的一种认可,达到了专家级别,可以对PostgreSQL数据......
  • rpyc python rpc 框架
    rpyc属于一个老牌项目了,支持rpc模式的处理,同时支持面向服务的开发模式,包含了一些安全控制,支持服务注册,服务发现包含的特性透明,可以使用类似本地模式的方法访问对称,client以及server都可以支持调用支持同步以及异步操作平台无关低开销安全,支持基于tls,以及ssh的访问模......
  • RISC-V
    异常时只在与当前RISC-V线程中的指令相关联的运行时发生的不寻常条件术语trap陷阱指由RISC-V线程中发生的异常情况导致的控制同步转移到陷阱处理程序。、术语中断指与当前RISC-V线程异步发生的外部事件。当必须服务的中断发生时,一些指令被选择接收中断异常,随后遇到陷阱。数据......