PHP和Erlang服务器通信基于协议{packet,N}

要点是 pack 和 unpack 函数
Erlang使用{packet,N}后,会自动在数据前面增加N为 16进制数据,代表接下来的数据长度
AS里面也有类似功能
PHP没有直接的方法,需要自己封装包头信息,和解包
(感谢 mryufeng 的提示,将fgets 改成 fread)


<?php
$host ="114.80.88.*";
$port =5101;
$fp = stream_socket_client("tcp://$host:$port", $errno, $errstr, 2);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
stream_set_timeout($fp,2);
get_line($fp);

put_line($fp,"SYSMSG,bobo,Hi boy");

fclose($fp);
}
function get_line($handle){
while(!feof($handle)){
$buff =fread($handle,2); //获得长度信息
$head =unpack("H*",$buff);
return fread($handle,hexdec($head[1]));
}
}
function put_line($handle,$data){
$body =pack("A*",$data); //将数据打包
$len =strlen($body);
$head =pack("H*",to_hex_str($len));
fwrite($handle,$head.$body);
}
function to_hex_str($num){ //将十进制长度转换成16进制,并且补0
$str =dechex($num);
$str =str_repeat('0',4-strlen($str)).$str;
return $str;
}
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值