Erlang Echo Server

來源:互聯網
上載者:User

-module(tcp_echo). -export([listen/0, listen/1]). -define(DEFAULT_PORT, 1155).-define(OPTION, [binary, {active, false}, {reuseaddr, true}]). listen() ->  ListenPort = get_app_env(listen_port, ?DEFAULT_PORT),listen(ListenPort). listen(ListenPort) ->io:format("Server listening on port: ~p~n", [ListenPort]),{ok, ListenSocket} = gen_tcp:listen(ListenPort, ?OPTION),accept(ListenSocket). get_app_env(Opt, Default) ->case application:get_env(application:get_application(), Opt) of{ok, Value} -> Value;_ ->case init:get_argument(Opt) of[[Value | _]] -> Value;error -> Defaultendend. accept(ListenPort) ->{ok, Socket} = gen_tcp:accept(ListenPort),io:format("Connection accept: ~p~n", [Socket]),Pid = spawn(fun() -> loop(Socket) end),gen_tcp:controlling_process(Socket, Pid),io:format("controlling_process~n"),Pid ! {ack, self()},accept(ListenPort). loop(Socket) ->receive{ack, _Parent} -> io:format("Parent: ~p~n", [_Parent]),child_loop(Socket)end. child_loop(Socket) ->inet:setopts(Socket, [{active, once}]),receive{tcp, Socket, Data} ->io:format("From socket ~p:~p~n", [Socket, Data]),gen_tcp:send(Socket, Data),child_loop(Socket);{tcp_closed, Socket} ->io:format("Socket ~p closed.~n", [Socket]);{tcp_error, Socket, Reason} ->io:format("An error occurs on socket ~p~n\tReason: ~p~n", [Socket, Reason])end.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.