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