Erlang的socket 编程简例
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的绝大多数功能。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |