2007/05/14

perl - telnetコマンドを自作する の Erlang バージョン

perl - telnetコマンドを自作する の Erlang(escript)バージョンです。


#!/usr/bin/env escript

main([Host]) ->
main([Host, telnet]);
main([Host, Port]) when is_list(Port) ->
main([Host,
case catch list_to_integer(Port) of
{'EXIT', _} ->
list_to_atom(Port);
Num ->
Num
end]);
main([Host, Port]) when is_atom(Port) ->
{ok, Num} = inet:getservbyname(Port, tcp),
main([Host, Num]);
main([Host, Port]) ->
{ok, S} = gen_tcp:connect(Host, Port, []),
spawn_link(fun() -> send_loop(S) end),
recv_loop(S).

send_loop(S) ->
Line = io:get_line(''),
gen_tcp:send(S, Line),
send_loop(S).

recv_loop(S) ->
receive
{tcp, _Port, Data} ->
io:format(Data);
{tcp_closed, _Port} ->
exit(normal)
end,
recv_loop(S).

0 件のコメント: