0

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

4

0 に答える 0