case STAGE_ADDR:
$cmd = ord($buffer[0]);
if($cmd != CMD_CONNECT)
{
echo "bad cmd $cmd\n";
$connection->close();
return;
}
這是 cmd 是協(xié)議的
CONNECT 0x01 連接
BIND 0x02 端口監(jiān)聽(也就是在Server上監(jiān)聽一個端口)
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])轉(zhuǎn)換字符串字節(jié)為什么是 1....
接收到的$buffer是二進制串,你打印出來的$buffer是bin2hex()后的16進制串,ord()是獲取第一個字符的ASCII編碼,而這里的ord是為了配合case邏輯。
看仔細啊,說了接收到的$buffer是二進制串啊,并沒有說接收到的$buffer是經(jīng)過bin2hex的,比如ord[$buffer[0]]就是對接收到的二進制串中的第一個字節(jié)的字符獲取對應(yīng)的ASCII碼。