当前位置: 移动技术网 > IT编程>脚本编程>Erlang > Erlang中的socket编程简单例子

Erlang中的socket编程简单例子

2017年12月01日  | 移动技术网IT编程  | 我要评论

erlang 中gen_tcp 用于编写tcp程序,gen_udp用于编写udp程序。一个简单的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,[binary,{packet,4}]),
         ok= gen_tcp:send(socket, term_to_binary(str)),
         receive
                   {tcp,socket,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,socket,host,port,bin}->
                            binreply= …,
                            gen_udp:send(socket,host,port,binreply),
                            loop(socket)
         end.

udp client 示例:
复制代码 代码如下:

udp_demo_client(request) ->
         {ok,socket}= gen_udp:open(0,[binary]),
         ok= gen_udp:send(socket,”localhost”,1234,request),
         value=    receive
                                     {udp,socket,_,_,bin}-> {ok,bin}
                            after2000 -> error
                            end,
         gen_udp:close(socket),
         value

注意,因为udp是不可靠的,一定要设一个超时时间,而且reqeust最好小于500字节。
websocket, js 和erlang相结合,能够实现web的绝大多数功能。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网