加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Erlang的socket 编程简例

发布时间:2020-12-13 20:05:33 所属栏目:PHP教程 来源:网络整理
导读:Erlang 中gen_tcp 用于编写TCP程序,gen_udp用于编写UDP程序。1个简单的TCP服务器echo示例: Start_echo_server()- {ok,Listen}= gen_tcp:listen(1234,[binary,{packet,4},{reuseaddr,true},{active,true}]), {ok,socket}=get_tcp:accept(Listen), gen_tcp:c

Erlang 中gen_tcp 用于编写TCP程序,gen_udp用于编写UDP程序。1个简单的TCP服务器echo示例:

Start_echo_server()->

         {ok,Listen}= gen_tcp:listen(1234,[binary,{packet,4},{reuseaddr,true},{active,true}]),

         {ok,socket}=get_tcp:accept(Listen),

         gen_tcp:close(Listen),

         loop(Socket).

 

loop(Socket) ->

         receive

                  {tcp,Socket,Bin} ->

                            io:format(“serverreceived binary = ~p~n”,[Bin])

                            Str= binary_to_term(Bin),

                            io:format(“server  (unpacked) ~p~n”,[Str]),

                            Reply= lib_misc:string2value(Str),

                            io:format(“serverreplying = ~p~n”,[Reply]),

                            gen_tcp:send(Socket,term_to_binary(Reply)),

                            loop(Socket);

                   {tcp_closed,Socket} ->

                            Io:format(“ServerSocket closed ~n”)

         end.

 

Tcp 的echo客户端示例:

echo_client_eval(Str) ->

         {Ok,Socket} = gen_tcp:connect(“localhost”,2345,4}]),

         ok= gen_tcp:send(Socket,term_to_binary(Str)),

         receive

                   {tcp,Bin}->

                            Io:format(“Clientreceived binary  = ~p~n”,[Bin]),

                            Val=binary_to_term(Bin),

                            io:format(“Clientresult = ~p~n”,[Val]),

                            gen_tcp:close(Socket)

         end.

 

UDP server示例

udp_demo_server(Port) ->

         {ok,Socket}= gen_udp:open(Open,[Binary]),

         loop(Socket).

Loop(Socket)->

         receive

                   {udp,Host,Port,Bin}->

                            BinReply= …,

                            gen_udp:send(Socket,BinReply),

                            loop(Socket)

         End.

 

UDP client 示例:

udp_demo_client(Request) ->

         {ok,Socket}= gen_udp:open(0,

         ok= gen_udp:send(Socket,”localhost”,1234,Request),

         Value=    receive

                                     {udp,_,Bin}-> {ok,Bin}

                            after2000 -> error

                            end,

         gen_udp:close(Socket),

         Value

注意,由于UDP是不可靠的,1定要设1个超时时间,而且Reqeust最好小于500字节。

WebSocket, JS 和Erlang相结合,能够实现Web的绝大多数功能。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读