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个长度就可以了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);
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));
}
}
B2S商城系统B2S商城系统是由佳弗网络工作室凭借专业的技术、丰富的电子商务经验在第一时刻为最流行的分享式购物(或体验式购物)推出的开源程序。开发采用PHP+MYSQL数据库,独立编译模板、代码简洁、自由修改、安全高效、数据缓存等技术的应用,使其能在大浏览量的环境下快速稳定运行,切实节约网站成本,提升形象。注意:如果安装后页面打开出现找不到数据库等错误,请删除admin下的runtime文件夹和a
0
立即学习“PHP免费学习笔记(深入)”;


每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号