我正在使用 php 连接到套接字服务器以发送二进制数据 - 即不是标准的 ascii(或可打印)字符串。例如,一条消息可能包含 ascii 0 或 0 - 255 之间的任何数字。
我有这样的功能:
function append_uint16($str, $num) {
$str += chr($num % 256);
$num /= 256;
$str += chr($num);
return $str;
}
它是这样调用的:
$msg = "\xA7\xA7";
$payload_size = 9 + 1 + strlen($param1) + 1 + strlen($param2);
$msg += append_uint16($msg, $payload_size);
然后我发送到这样的套接字服务器:
function send_msg($host, $port, $msg) {
$fp = stream_socket_client("tcp://" . $host . ":" . $port, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($fp, $msg);
}
}
但是消息的格式不正确。我怀疑我的字符串处理不太正确。或者也许我不能以这种方式在 php 中使用字符串?有任何想法吗?