浏览 12950 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-12
最后修改:2009-08-12
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; } ?> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |