使用stream_socket_客户端和php字符串发送二进制消息
我正在使用php连接到套接字服务器以发送二进制数据-即非标准ascii(或可打印)字符串。例如,消息可能包含ascii 0或0-255之间的任何数字 例如,我有如下函数:使用stream_socket_客户端和php字符串发送二进制消息,php,sockets,Php,Sockets,我正在使用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 +
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);
}
}
这就是所谓的:
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);
}
}
然后我将发送到一个套接字服务器,如下所示:
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);
}
}
函数发送消息($host,$port,$msg){
$fp=stream\u socket\u client(“tcp://“$host.”:“$port,$errno,$errstr,30”);
如果(!$fp){
回显“$errstr($errno)
\n”;
}否则{
fwrite($fp,$msg);
}
}
但这些信息的格式不正确。我怀疑我的字符串处理不太正确。或者我不能用这种方式在php中使用字符串?有什么想法吗?你说的“格式不正确”是什么意思?老实说,我不确定,我想我需要把字符串打印成十六进制来检查