php socket编程|网络字节序,大端序|workerman
1.
<?php //网络字节序是指大端序,TCP/IP都是采用网络字节序的方式。 //======================================================================================================// //n -- 无符号短整数 (16位, 大端字节序) $str = 'test.string'; $pack = pack('n', strlen($str)); echo strlen($pack); // 2个字节,此值是确定的 $unpack = unpack('nLen', $pack); // Len相当于定义的一个变量,返回值为打包时的长度 echo $unpack['Len']; // 等于strlen($str) 11个字节 //exit; //======================================================================================================// //N -- 无符号长整数 (32位, 大端字节序) $str = 'test.string'; $pack = pack('N', strlen($str)); echo strlen($pack); // 4个字节,此值是确定的 $unpack = unpack('NLen', $pack); // Len相当于定义的一个变量,返回值为打包时的长度 echo $unpack['Len']; // 等于strlen($str) 11个字节 exit; //======================================================================================================// //如果提供socket服务方定义的 //请求边界标识的长度为2,则用unsigned 16位的 ‘n’ //请求边界标识的长度为4,则用unsigned 32位的 ‘N’ //那么整个包体为 【网络字节序】+数据包实体,附加发送的长度参数为:【数据包实体长度+网络字节序长度】 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $connect = socket_connect($socket, '192.168.1.10', 55660); $buffer = '我是数据包实体'; $length = strlen($buffer); $pack = pack("N", $length + 4); socket_write($socket, $pack.$buffer, $length + 4); //同样unpack出来的lenght也是等于strlen($buffer)+4 //那么socket_read之后的返回数据包就需要去掉4个长度就可以了
Copier après la connexion
2.
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $conn = socket_connect($socket, '192.168.1.10', 55660); $buffer = 'test.string'; $len = strlen($buffer); echo 'buffter length: '.$len.' '; $pack = pack('n', $len + 2); $send = socket_write($socket, $pack.$buffer, $len + 2); if($send){ echo 'send ok '; } $read = socket_read($socket, 10240); echo 'read data:'.$read .' '; echo 'read length:'.strlen($read).' '; echo 'real data is:'.substr($read, 2);
Copier après la connexion
3.
<?php class AndyHua extends Man\Core\SocketWorker{ public function dealInput($recv){ //目前已经收到的长度 $len = strlen($recv); //preread_length = 2 if($len < 2){ return 2 - $len; } $t = unpack('nLen', $recv); //Len为包的实际长度 return $t['Len'] - $len; //如果$t['Len']等于$len那就说明已经接收完了 } public function dealProcess($recv){ return $this->sendToClient($recv); //return $this->sendToClient(substr($recv, 2)); } }
Copier après la connexion
4. [图片] QQ截图20141114144433.png
5. [图片] QQ截图20141114144329.png
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois
By 尊渡假赌尊渡假赌尊渡假赌
Assassin's Creed Shadows: Solution d'énigmes de coquille
3 Il y a quelques semaines
By DDD
Quoi de neuf dans Windows 11 KB5054979 et comment résoudre les problèmes de mise à jour
2 Il y a quelques semaines
By DDD
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois
By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)