php usa socket para comunicarse a través de tcp y php16 cálculo de dígitos de verificación de suma hexadecimal

Requisitos:

El proyecto php necesita enviar un comando de datos hexadecimales al middleware a través de un enlace tcp (incluida la verificación de suma de dígitos hexadecimales)

Darse cuenta:

Primero, hablemos sobre la verificación de suma hexadecimal, cómo hacer esto con php.

Por ejemplo, los siguientes datos hexadecimales de 24 bits:

02 09 01 00 55 55 00 02 77 23 49 9b
 
9b son los dos dígitos inferiores de la suma hexadecimal de los primeros 22 dígitos:
 
               // Calcular el dígito de verificación $ m como datos 
               $ dexArr = explotar ('', $ m );
                foreach ( $ dexArr  como  $ clave => $ valor ) {
                    $ dexArr [ $ clave ] = hexdec ( $ valor ); 
               } 
               $ CK2 = dechex ( array_sum ( $ dexArr ));
                $ Consulta = substr ( $ CK2 , strlen ( $ CK2 ) -2,2);

Primero convierta a suma decimal y luego convierta a hexadecimal para tomar los dos dígitos inferiores.

 

Después de preparar los datos, ¿cómo envía los datos el socket?

Convierta los datos hexadecimales en dos arreglos, uno por uno, y luego envíelos. Del mismo modo, los datos binarios recibidos se convierten según sea necesario.

        // 将16进制数据转换成两个一组的数组 如 02 09 01 00 55 55 00 02 77 23 49 9b
$ctlcmdStrArray
= str_split(str_replace(' ', '', $ctlcmd), 2);

// 创建Socket ipv4 tcp 流数据 $socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname("tcp")); if (socket_connect($socket, "127.0.0.1", 8888)) { //连接 for ($j = 0; $j < count($sendStrArray); $j++) { socket_write($socket, chr(hexdec($sendStrArray[$j]))); // 逐组数据发送 } $receiveStr = ""; $receiveStr = socket_read($socket, 1024, PHP_BINARY_READ); // 采用2进制方式接收数据 $receiveStrHex = bin2hex($receiveStr); // 将2进制数据转换成16进制 }else{
// 链接失败
return false; } socket_close($socket); // 关闭Socket

 

 

Supongo que te gusta

Origin www.cnblogs.com/kala00k/p/12686664.html
Recomendado
Clasificación