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で文字列を使用できないのでしょうか? 何か案は?