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个长度就可以了
Salin selepas log masuk
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);
Salin selepas log masuk
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)); } }
Salin selepas log masuk
4. [图片] QQ截图20141114144433.png
5. [图片] QQ截图20141114144329.png
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas
R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu
By 尊渡假赌尊渡假赌尊渡假赌
Assassin's Creed Shadows: Penyelesaian Riddle Seashell
3 minggu yang lalu
By DDD
Apa yang Baru di Windows 11 KB5054979 & Cara Memperbaiki Masalah Kemas Kini
2 minggu yang lalu
By DDD
Akan R.E.P.O. Ada Crossplay?
1 bulan yang lalu
By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas
Tutorial CakePHP
1382
52

