php项目中的二进制通讯怎么利用erlang实现

  

php项目中的二进制通讯怎么利用erlang实现?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

一般来说网络通讯常用的方式有两种:文本通讯和二进制通讯。php与erlang之间实现文本通讯比较简单,这里就不做讨论,本文主要讨论的是php与erlang实现二进制通讯的实现方法。实现步骤如下:

<强> erlang端代码:

模块(服务器)。   出口((启动/0))。   ——(使用UINT,大敌;32/unsigned-little-integer)。   ——(INT,大敌;32/signed-little-integer)。   ——(USHORT,大敌;16/unsigned-little-integer)。   ——(时间短,大敌;16/signed-little-integer)。   ——(UBYTE,大敌;8/unsigned-little-integer)。   ——(,字节,8/signed-little-integer)。   ——(,港口,5678)。

% %启动服务并接受客户端的连接

开始(),→   {好,,才能LSock},=, gen_tcp:听(?港口,,(二进制,,{包,,0},{活跃,,假})),   io:才能格式(“socket 听:~ p 提醒~ p  ~ n", [LSock,, ?港口]),,,接受(LSock)   接受(LSock),→   {好吧,,才能ASock},=, gen_tcp:接受(LSock),   产卵才能(有趣的(),→,server_loop (ASock),结束),   ,接受(LSock)。   server_loop (ASock),→   case 才能;gen_tcp: recv (ASock, 0),   ,,,{好,,& lt; & lt; Len: ? USHORT, Cmd: ? USHORT,包含:4/二进制单位:8祝辞祝辞,=,一},→   ,,,,,io:格式(“recv 数据:~ p  ~ p  ~ p ~ n",, (Len, Cmd,,包含]),   ,,,,,% %将接收到数据发送回客户端   ,,,,,gen_tcp:发送(ASock,,),   ,,,,,server_loop (ASock);   ,,,{,,}数据,→   ,,,,,io:格式(“recv  unformated 数据:,~ p ~ n",,(数据)),,,,,,,server_loop (ASock);   ,,,{错误,,_},→   ,,,,,{,,recv_error}   ,才能结束。

<强> php端代码:

& lt; php ?      时间=美元timeout  3;//超时时间:3秒      fp 美元;=,fsockopen (“tcp://127.0.0.1",, 5678,, errno美元,errstr美元,美元超时/*,连接超时时间,*/);   if  (! $ fp), {   ,echo “errstr 美元(美元errno) & lt; br /祝辞;\ n";   },{else    ,stream_set_timeout (fp美元,,超时);   ,//远程数据接收或发送超时时间=,美元format “vva4";   ,data 美元;=,包(格式,美元,4日,10001年,“abcd");   ,//data 美元;按照一定格式被打包成二进制数据      ,写入文件(fp美元,,数据);      (!,if  feof (fp)美元),{      时间=美元才能rs 从文件中读(fp美元,,1024);//读才能取远程数据   if 才能;(rs), {      ,,len 美元;=,strlen (rs);   ,,//len 美元;可以获取数据的长度,用以计算内容的长度   ,,//在这个例子中,content 的长度为,4      ,,format 美元;=,“vlen/vcmd/a4content";   ,,data 美元;=,解压缩(格式美元,,rs);      ,,print_r(元数据);   ,,},{else    ,,echo “超时!“;   ,,}   ,}else  {   echo 才能“超时!“   ,}   ,文件关闭(fp);   }   ?祝辞

运行正常的情况下,php端会显示以下内容:

Array  (, (len)=祝辞,4,(cmd),=祝辞,10001,(内容),=祝辞,abcd )

针对通讯的一些<强>说明:

这里用到的是php的包函数和解压函数:

包函数:将数据按照一定格式打包成二进制数据,生成的数据接近C/c++的结构体数据(C/c++字符串带结束符)。

解包函数:与包装相反,对二进制数据进行解包。

对应的erlang端,则直接用位语法来匹配二进制数据即可。

关于php项目中的二进制通讯怎么利用erlang实现问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

php项目中的二进制通讯怎么利用erlang实现