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를 돈다.
도움이 되셨다면, 광고 클릭을 ㅎㅎ ^^
댓글 없음:
댓글 쓰기