当前位置: 首页 > 工具软件 > HP-Socket > 使用案例 >

C#中HP-Socket通信组件详解

经正祥
2023-12-01

概念

HP-Socket 是国产的TCP、UDP和HTTP 通信框架,包含服务端、客户端和 Agent 组件,提供 C/C++、C#、Java、Python 等多种编程语言接口。
与传统TCP通讯区别的是HP-Socket 对通信层做到了完全封装,程序不必关注通信层的任何细节;HP-Socket提供基于事件通知模型的 API 接口,能简单高效地整合到新旧应用程序中。

示例

        TcpServer hpServer;
        bool tcp1State = false;
        
        public Form1()
        {
            InitializeComponent();
        }

        enum PlcPort
        {
            Op1 = 4000,
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            hpServer = new TcpServer();
            hpServer.OnPrepareListen += OnPrepareListen;
            hpServer.OnAccept += OnAccept; //连接事件
            hpServer.OnClose += OnClose;   //断开连接事件
            hpServer.OnReceive += OnReceive;// 接收数据
            hpServer.OnSend += OnSend;// 发送数据
                                              
            hpServer.Address = "127.0.0.1";// 设置服务端IP
            hpServer.Port = Convert.ToUInt16(PlcPort.Op1);// 设置端口
            hpServer.SendPolicy = SendPolicy.Direct;
            hpServer.Start();
            ReportMsg("服务端已开启并监听");
        }

        private HandleResult OnPrepareListen(IServer sender, IntPtr listen)
        {
            return HandleResult.Ok;
        }

        private HandleResult OnAccept(IServer sender, IntPtr connId, IntPtr client)
        {
            // 获取客户端地址
            if (!sender.GetRemoteAddress(connId, out var ip, out var port))
            {
                return HandleResult.Error;
            }

         

            return HandleResult.Ok;
        }

        //服务器收到数据
        private HandleResult OnReceive(IServer sender, IntPtr connId, byte[] data)
        {
            try
            {                
                return HandleResult.Ok;
            }
            catch (Exception)
            {
                return HandleResult.Ignore;
            }
        }

        private HandleResult OnSend(IServer sender, IntPtr connId, byte[] data)
        {
            try
            {
                return HandleResult.Ok;
            }
            catch (Exception)
            {
                return HandleResult.Ignore;
            }
        }

        //服务器关闭连接
        private HandleResult OnClose(IServer sender, IntPtr connId, SocketOperation socketOperation, int errorCode)
        {
            return HandleResult.Ok;
        }

        //服务器关闭
        private HandleResult OnShutdown(IServer sender)
        {

            return HandleResult.Ok;
        }
 类似资料: