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