设为首页 收藏本站
查看: 1243|回复: 0

erlang与shell 通过socket通信

[复制链接]

尚未签到

发表于 2018-8-21 12:09:08 | 显示全部楼层 |阅读模式
  今天演示,如何利用shell和erlang通过socket进行通信,希望能对大家有所启发。
  服务端由erlang设计的一个支持并发的取整服务器,客户端由shell脚本实现(当然,其他动态语言做起来也很方便,这里有个目的就是介绍shell脚本的扩展应用)。客户端发送一个浮点数,服务端处理后返回相应的整数。这里只是一个引子,希望看到的朋友可以自己去灵活应用。
  服务器:
  


  • %%----------------------------------------------------
  • %% @doc 取整服务器
  • %%----------------------------------------------------
  • -module(integer).
  • -author('bloodiron888@gmail.com').
  • -compile([export_all]).

  • listen() ->
  •     {ok, L} = gen_tcp:listen(9060, [binary, {packet, 0}, {active, false}, {reuseaddr, true}]),
  •     do_accept(L).

  • %% @doc 多连接支持
  • do_accept(L) ->
  •     {ok, S} = gen_tcp:accept(L),
  •     io:format("client connect: ~w~n", [S]),
  •     spawn(fun() -> do_echo(S) end),
  •     do_accept(L).

  • do_echo(S) ->
  •     case gen_tcp:recv(S, 0) of
  •         {ok, Data} ->
  •             Reply = anlysis(Data),
  •             gen_tcp:send(S, Reply),
  •             do_echo(S);
  •         {error, closed} -> ok
  •     end.

  • %% @doc 分析数据
  • anlysis(Data) when is_binary(Data) ->
  •     Request = binary_to_atom(Data, utf8),
  •     io:format("request ~w~n", [Request]),
  •     case catch list_to_float(atom_to_list(Request)) of
  •         {'EXIT', _} -> ;
  •         Number when is_float(Number) ->
  •                 %%Raw = io_lib:format("~w", [round(Number)]),
  •                 Raw = io_lib:format("~w~n", [trunc(Number)]),
  •                 list_to_binary(Raw);
  •         _ ->
  •     end.
  

  编译并启动服务器:
  


  • [linux]$ erl -make integer.erl
  • [linux]$ erl -s integer listen
  

  客户端:
  


  • #!/bin/bash
  • # filename:cl.sh
  • exec 8 /dev/tcp/211.211.23.67/9060
  • echo -n $1 >&8
  • echo
  • cat

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-554677-1-1.html 上篇帖子: 通过Power Shell 管理Office 365 下篇帖子: shell的部分习题(持续更新)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表