workerman socks5 问题

0
  case STAGE_ADDR:
$cmd = ord($buffer[0]);

if($cmd != CMD_CONNECT)
{
echo "bad cmd $cmd\n";
$connection->close();
return;
}

这是 cmd 是协议的


CONNECT 0x01 连接
BIND 0x02 端口监听(也就是在Server上监听一个端口)
UDP ASSOCIATE 0x03 使用UDP


我打印出了$buffer 如下:


0501 0003 1277 7777 2e67 6f6f 676c 6561
7069 732e 636f 6d01 bb

这上面是十六进制的,为什么 要 ord 呢?.ord("01")是 48


$str = '0x01';

echo ord($str);

很疑惑这里啥意思,ord($buffer[1])转换字符串字节为什么是 1....

已邀请:

随某人 - 若无闲事挂心头,便是人间好时节.

赞同来自:

我感觉我哪块理解错了,字节这方便是薄弱点,大神点拨点拨

blogdaren - 常年游走于 Linux、PHP、C、VIM 之间【http://www.phpcreeper.com】

赞同来自:

接收到的$buffer是二进制串,你打印出来的$buffer是bin2hex()后的16进制串,ord()是获取第一个字符的ASCII编码,而这里的ord是为了配合case逻辑。

随某人 - 若无闲事挂心头,便是人间好时节.

赞同来自:

但是$buffer好像没有经过bin2hex函数,只是一个二进制字符串

要回复问题请先登录注册