[erlang-questions] Simple TCP Server

Fred Youhanaie <>
Tue Dec 17 22:54:57 CET 2013


To add to the other suggestions:

0. Does it work if you run it from the erlang shell?

1. If you're starting it with "erl -s ..." then the port number will be passed as atom, rather than integer! So you'll need to convert to integer.

2. In the get_date() you probably meant to use file:read_line/1, rather than io:get_line/1.

Cheers
f.


On 17/12/13 18:53, Ari King wrote:
> Hi,
>
> The code below results in "init terminating in do_boot." Seemingly the
> problem is on line 5, does anyone see what is wrong with it? Additionally,
> I'm trying to pass the port in as a command line argument, but for some
> reason it doesn't work and I need to hardcode it.
>
> -module(mock_tcp).
> -export([start/1]).
>
> start([Port, Filename]) ->
>    {ok, Listen} = gen_tcp:listen(Port, [binary]),
>    spawn(fun() -> connect(Listen, Filename) end),
>    io:format("Server available on port ~w. Reading from file ~w.", [Port,
> Filename]).
>
> connect(Listen, Filename) ->
>    {ok, Socket} = gen_tcp:accept(Listen),
>    spawn(fun() -> connect(Listen, Filename) end),
>    {ok, Device} = file:open(Filename, read),
>    get_data(Device, Socket).
>
> get_data(Device, Socket) ->
>    case io:get_line(Device) of
>      {ok, Data} ->
>        gen_tcp:send(Socket, Data),
>        get_data(Device, Socket);
>      eof ->
>        file:close(Device),
>        gen_tcp:close(Socket)
>    end.
>
> Thanks.
>
> -Ari



More information about the erlang-questions mailing list