php实现与erlang的二进制通讯实例解析
一般来说网络通讯常用的方式有2种:文本通讯和二进制通讯。php与erlang之间实现文本通讯比较简单,这里就不做讨论,本文主要讨论的是php与erlang实现二进制通讯的实现方法。实现步骤如下:
erlang端代码:
-export([start/0]).
-define(UINT,32/unsigned-little-integer).
-define(INT,32/signed-little-integer).
-define(USHORT,16/unsigned-little-integer).
-define(SHORT,16/signed-little-integer).
-define(UBYTE,8/unsigned-little-integer).
-define(BYTE,8/signed-little-integer).
-define(PORT,5678).
%%启动服务并接受客户端的连接
start()->
{ok,LSock}=gen_tcp:listen(?PORT,[binary,{packet,0},{active,false}]),
io:format("socketlisten:~pon~p~n",[LSock,?PORT]),
accept(LSock).
accept(LSock)->
{ok,ASock}=gen_tcp:accept(LSock),
spawn(fun()->server_loop(ASock)end),
accept(LSock).
server_loop(ASock)->
casegen_tcp:recv(ASock,0)of
{ok,<<Len:?USHORT,Cmd:?USHORT,Contain:4/binary-unit:8>>=A}->
io:format("recvdata:~p~p~p~n",[Len,Cmd,Contain]),
%%将接收到数据发送回客户端
gen_tcp:send(ASock,A),
server_loop(ASock);
{ok,Data}->
io:format("recvunformateddata:~p~n",[Data]),
server_loop(ASock);
{error,_}->
{ok,recv_error}
end.
php端代码:
<?php $timeout=3; //超时时间:3秒 $fp=fsockopen("tcp://127.0.0.1",5678,$errno,$errstr,$timeout/*连接超时时间*/); if(!$fp){ echo"$errstr($errno)<br/>\n"; }else{ stream_set_timeout($fp,$timeout); //远程数据接收或发送超时时间 $format="vva4"; $data=pack($format,4,10001,"abcd"); //$data按照一定格式被打包成二进制数据 fwrite($fp,$data); if(!feof($fp)){ $rs=fread($fp,1024); //读取远程数据 if($rs){ $len=strlen($rs); //$len可以获取数据的长度,用以计算content的长度 //在这个例子中,content的长度为4 $format="vlen/vcmd/a4content"; $data=unpack($format,$rs); print_r($data); }else{ echo"timeout!"; } }else{ echo"timeout!"; } fclose($fp); } ?>
运行正常的情况下,php端会显示以下内容:
Array([len]=>4[cmd]=>10001[content]=>abcd)
针对通讯的一些说明:
这里用到的是php的pack函数和unpack函数:
pack函数:
unpack函数:
对应的
相关文章
- html导航栏纵向代码,html横向导航栏怎么做?横向导航条代码实例
- 交换机vlan配置实例_h3c vlan配置
- executorservice实例_java controller
- 在Oracle中,实例恢复和介质恢复的区别是什么?
- 【Android 逆向】函数拦截实例 ( ② 插桩操作 | 保存实际函数入口 6 字节数据 | 在插桩的函数入口写入跳转指令 | 构造拼接桩函数 )
- 在Linux上快速搭建PHP开发环境(linux搭建php环境)
- PHP与MySQL网站开发实操指南(php和mysql开发)
- 器使用Linux快速启动PHP服务器(linux启动php服务)
- Oracle实例重启步骤:快速而有效!(oracle重启实例)
- 学习PHP程序员必会的Linux技术(php程序员linux)
- 实现PHP的Redis扩展安装(php安装redis扩展)
- 在php中解除MySQL与PHP的绑定(mysql不包括)
- MySQL数据库从零开始的C语言实现(c mysql数据库实例)
- MySQL数据库应用实例C语言编程实例(c mysql数据库例子)
- 云上Oracle体验最优实施方案(oracle云最佳实例)
- 不错的mod_perl编程的简单应用实例介绍
- PHP中实现汉字转区位码应用源码实例解析
- PHP实现多条件查询实例代码
- PHP数据流应用的一个简单实例
- ListView分页加载更新实例分享
- MVC后台创建Json(List)前台接受并循环读取实例
- php实现webservice实例
- php常用字符串处理函数实例分析
- php使用PDO操作MySQL数据库实例
- js对象基础实例分析
- C语言内存对齐实例详解