HPsocketCS,TCP通讯连接与发送

使用HPsocketCS进行TCP的连接与发送。
关键地点在连接接受到数据和,发送数据的情况。
第一步:将HPsocket引用到项目文件中
在这里插入图片描述
第二步:将头文件的引用写上

using HPSocketCS;

第三步:创建TCP对象

TcpServer hpServer = new TcpServer();

第四步:创建连接和连接事件


            hpServer.OnAccept += HpServer_OnAccept1; //连接事件
            hpServer.OnClose += HpServer_OnClose1;   //断开连接事件
            // 接收数据
            hpServer.OnReceive += HpServer_OnReceive1;
            // 发送数据
            hpServer.OnSend += HpServer_OnSend;
            // 设置服务端IP
            //这里我直接将IP地址写死了,IP地址是一串string类型的字符串
            //所以我们可以在Winform中通过TextBox的形式将IP写入其中
            hpServer.IpAddress = "127.0.0.1";
            // 设置端口
            //端口号是一个Int类型的数字
            hpServer.Port = Convert.ToUInt16(8000);
            hpServer.SendPolicy = SendPolicy.Direct;
            //在这里我将上位机作为服务端,PLC作为客户端
            //服务端开启
            hpServer.Start();
            string strMsg = "服务端已开启并监听.";
            listBoxMsg.Items.Add(strMsg);
            listBoxMsg.TopIndex = listBoxMsg.Items.Count - 1;
            strMsg = "服务端监听Socket为{0}:{1}.";
            listBoxMsg.Items.Add(strMsg);
            listBoxMsg.TopIndex = listBoxMsg.Items.Count - 1;
            string ipListen = "";
            ushort portListen = 0;
            hpServer.GetListenAddress(ref ipListen, ref portListen);

第五步创建对应的连接事件
由于TCP的发送信号是在TCP线程中进行快速循环的,所以我们在发送信号的时候不能将发送信号写在OnSend函数中去。
所以我们在接受数据中写接受信号,然后调用我们要运行的程序,在另外在运行程序结束后发送信号

 private HandleResult HpServer_OnSend(IntPtr connId, byte[] bytes)
        {
    
    
            return HandleResult.Ok;
        }
        /// <summary>
        /// TCP接受数据,connIdTCP连接句柄,dataTCP获取到的数据
        /// </summary>
        /// <param name="connId"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        private HandleResult HpServer_OnReceive1(IntPtr connId, byte[] data)
        {
    
    
            string test;
            try
            {
    
    
                test = Encoding.Default.GetString(data);
                string strMsg_01 = "服务器接受数据: " + test;
                listBoxMsg.Items.Add(strMsg_01);
                listBoxMsg.TopIndex = listBoxMsg.Items.Count - 1;
                if (test == "abcde")
                {
    
    
                //user()为工作运行程序
                    User();
                    test = "";
                    //在运行程序结束后发送数据出去
                    TCPSend()}
                return HandleResult.Ok;
            }
            catch (Exception)
            {
    
    
                return HandleResult.Ignore;
            }
        }
        private void TCPSend()
        {
    
    
            string sendcenter = Convert.ToString(centerx * 1000) + Convert.ToString(centery * 1000);
            byte[] sendByetcenter = Encoding.Default.GetBytes(sendcenter);
            hpServer.Send(ID, sendByetcenter, sendByetcenter.Length);
        }
        private HandleResult HpServer_OnClose1(IntPtr connId, SocketOperation enOperation, int errorCode)
        {
    
    
            return HandleResult.Ok;
        }

        private HandleResult HpServer_OnAccept1(IntPtr connId, IntPtr pClient)
        {
    
    
            //tCP运行句柄
            ID = connId;
            return HandleResult.Ok;
        }
         private void TCPSend()
        {
    
    
        //sendcenter这个是我们需要发送的信息,先将其转化为字符串再转化为byte类型
            string sendcenter = Convert.ToString(centerx*1000) + Convert.ToString(centery * 1000);
            byte[] sendByetcenter = Encoding.Default.GetBytes(sendcenter);
            //ID是TCP的句柄,我们可以再连接事件中将ID进行赋值,ID的类型是IntPtr的句柄类型
            hpServer.Send(ID, sendByetcenter, sendByetcenter.Length);
        }

效果图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_51559565/article/details/128230637