32 lines
726 B
Elixir
32 lines
726 B
Elixir
defmodule Echo.Client do
|
|
def connect(host, port \\ 6666) do
|
|
opts = [active: false, packet: :line]
|
|
{:ok, socket} = :gen_tcp.connect(host, port, opts)
|
|
loop(socket)
|
|
end
|
|
|
|
defp loop(socket) do
|
|
case IO.gets("> ") do
|
|
:eof ->
|
|
:gen_tcp.close(socket)
|
|
line ->
|
|
:gen_tcp.send(socket, line)
|
|
case :gen_tcp.recv(socket, 0) do
|
|
{:ok, data} ->
|
|
IO.write(data)
|
|
loop(socket)
|
|
{:error, _} ->
|
|
:gen_tcp.close(socket)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
with [host, port | _] <- System.argv(),
|
|
{port, _} <- Integer.parse(port)
|
|
do
|
|
Echo.Client.connect(String.to_atom(host), port)
|
|
else
|
|
_ -> Echo.Client.connect(:"127.0.0.1", 6666)
|
|
end
|