http://www.erlang.org/examples/klacke_examples/time_server.erl
%%%---------------------------------------------------------------------- %%% File : time_server.erl %%% Author : Claes Wikstrom <klacke@erix.ericsson.se> %%% Purpose : %%% Created : 3 Nov 1998 by Claes Wikstrom <klacke@erix.ericsson.se> %%%---------------------------------------------------------------------- %%% 이 예제는 다른 예제보다, 매우 practical하기 때문에
%%% 초보자는 반드시 이해하면 좋겠다.
-module(time_server). -author('klacke@erix.ericsson.se'). %%% module 이름과 저자에 대한 명시이다. module은 반드시 명시해야 한다. -export([start/0, loop0/1]). %%% 외부에 공개할 인터페이스이다. start와 loop0가 공개가 되고,
%%% loop0의 arity(인수의 수)는 1이다. -define(PORTNO, 2345). start() -> start(?PORTNO). start(Pno) -> spawn(?MODULE, loop0, [Pno]). %%% 시작시 loop0를 실행하는 process를 생성한다.
loop0(Port) -> case gen_tcp:listen(Port, [binary, {packet, 0}, {active, false}]) of {ok, LSock} -> loop(LSock); _ -> stop end. %%% gen_tcp의 모듈에 있는 listen을 호출하고, 그 결과가 ok이면 LSock을
%%% 받아서 loop를 호출한다.
%%% 그렇지 않으면 stop한다.
loop(Listen) -> case gen_tcp:accept(Listen) of {ok, S} -> gen_tcp:send(S, io_lib:format("~p~n", [{date(), time()}])), gen_tcp:close(S), loop(Listen); _ -> loop(Listen) end. %%% accept가 성공하면, Socket(S)를 받아서 date(),time()을 찍어서 send하고,
%%% close한다. 그리고 다시 loop를 돈다.
도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^
댓글 없음:
댓글 쓰기