首页 / PHP / Php与Erlang的Socket通信
Php与Erlang的Socket通信
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Php与Erlang的Socket通信,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2672字,纯文字阅读大概需要4分钟。
内容图文
![Php与Erlang的Socket通信](/upload/InfoBanner/zyjiaocheng/201/52b226cf2ead4c65a7c72b2b526c0f37.jpg)
一般来说网络通讯常用的方式有2种:文本通讯和二进制通讯。php与erlang之间实现文本通讯比较简单,这里就不做讨论,本文主要讨论的是php与erlang实现二进制通讯的实现方法。实现步骤如下:
erlang端代码:
-module(server).-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("socket listen: ~p on ~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) -> case gen_tcp:recv(ASock, 0) of {ok, <<Len:?USHORT,Cmd:?USHORT,Contain:4/binary-unit:8>> = A} -> io:format("recv data: ~p ~p ~p~n", [Len, Cmd, Contain]), %%将接收到数据发送回客户端 gen_tcp:send(ASock, A), server_loop(ASock); {ok, Data} -> io:format("recv unformated data: ~p~n", [Data]), server_loop(ASock); {error, _} -> {ok, recv_error} end.
php端代码:
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函数:将数据按照一定格式打包成二进制数据,生成的数据接近C/C++的结构体数据(C/C++字符串带结束符)。
unpack函数:与pack相反,对二进制数据进行解包。
对应的erlang端,则直接用位语法来匹配二进制数据即可。
PHP 5.3新增魔术方法__invoke概述
PHP自从5.3版以来就新增了一个叫做__invoke的魔术方法,使用该方法就可以在创建实例后,直接调用对象。如下示例所示:classtestClass{publicfunction__invoke{prin
PHP结合JQueryJcrop实现图片裁切实例详解
我们经常可以看到一些网站上有图片剪切的功能,或许你会觉得这一功能炫目华丽,神秘莫测!但是今天介绍的一款专用于图片裁切的插件jquery.Jcrop.min.
PHP实现根据设备类型自动跳转相应页面的方法
随着当今移动设备的普及,上网已经比过去更加方便。针对Android智能手机,iPhone/iPad等移动终端,很多网站都相继推出了针对电脑和这类手机等移动设
内容总结
以上是互联网集市为您收集整理的Php与Erlang的Socket通信全部内容,希望文章能够帮你解决Php与Erlang的Socket通信所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。