HPsocketCS, conexión de comunicación TCP y envío

Utilice HPsocketCS para conectarse y enviar TCP.
El punto clave es cuando la conexión recibe datos y envía datos.
Paso 1: haga referencia a HPsocket en el archivo del proyecto
inserte la descripción de la imagen aquí
Paso 2: escriba la referencia al archivo de encabezado

using HPSocketCS;

Paso 3: Crear un objeto TCP

TcpServer hpServer = new TcpServer();

Paso cuatro: crear conexiones y eventos de conexión


            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);

El quinto paso es crear el evento de conexión correspondiente.Dado
que la señal de envío de TCP está en un bucle rápido en el hilo TCP, no podemos escribir la señal de envío en la función OnSend al enviar la señal.
Entonces, escribimos la señal de aceptación en los datos de recepción, luego llamamos al programa que queremos ejecutar y enviamos la señal después de que finaliza el programa en ejecución.

 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);
        }

Representaciones:
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_51559565/article/details/128230637
Recomendado
Clasificación