[erlang-questions] Bi-directional Java/Erlang socket communication?
Dan Rubino
webaccounts@REDACTED
Sat Sep 13 19:38:47 CEST 2008
Hi Pablo,
Thanks I will give that a go! Still getting used to the Erlang
libraries/API's.
Thanks,
Dan
On Sat, 2008-09-13 at 12:20 -0300, Pablo Polvorin wrote:
> I guess readLine() is blocked waiting to receive a line.., isn't it?
> also, gen_tcp:send(Socket,<<"Test String">>) is probably what you want
> instead of using term_to_binary/1
>
>
>
> 2008/9/13 Dan Rubino <webaccounts@REDACTED>
> Hi all,
>
> I have an Erlang process which uses gen_tcp:listen/recv/send.
>
> Now I can send/receive messages Erlang<->Erlang but if I use a
> Java
> process I can only send messages to Erlang from Java and not
> vice versa.
>
> The Java used to send and receive is pretty simple:
>
> Socket s = new Socket(host, 2345);
>
> System.out.println("Connected to socket on: " + host +
> ":" + 2345);
>
> DataOutputStream os = new
> DataOutputStream(s.getOutputStream());
>
> String a = "Hello, world |23|24|26.";
>
> os.write(a.getBytes());
>
> BufferedReader in = new BufferedReader(new
> InputStreamReader(s.getInputStream()));
>
> System.out.println("echo: " + in.readLine());
>
>
> The Erlang code which works (broken down but in reality is
> across
> multiple modules):
>
> {ok, Listen} = gen_tcp:listen(Port, [binary, {packet, 0},
> {reuseaddr,
> true}, {active, false}]),
>
> Which leads to:
>
> receive
> true ->
> {ok, Socket} = gen_tcp:accept(Listen),
> try gen_tcp:accept(Listen) of
> {ok, Socket} ->
> spawn(fun() -> parallel_loop(Listen,
> CallBackMod) end),
> CallBackMod:handle_call({socket,Socket}),
>
> which leads to:
>
> handle_call({socket, Socket}) ->
> case gen_tcp:recv(Socket, 0) of
> {ok, Data} ->
> io:format("Data received: ~p~n", [Data]),
> gen_tcp:send(Socket, term_to_binary("Test
> String")),
> handle_call({socket, Socket});
> {error, closed} ->
> io:format("Socket closed.~n"),
> ok;
> Val ->
> io:format("Val: ~p~n", [Val])
> end.
>
> Like I say, the Erlang process can read the data sent from the
> Java process too it but for some reason
> which I am not totally sure of - the java process is unable to
> pickup the data being sent back from the
> Erlang process using gen_tcp:send()
>
> Has anyone here got any experience performing socket
> communication between Erlang and Java?
>
> There doesnt seem to be any useful articles on the Net around
> this unfortunately.
>
> Any help greatly appreciated - a java example would be great!
>
> Thanks
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions
>
>
>
> --
> --
> pablo
> http://ppolv.wordpress.com
> ----
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions
More information about the erlang-questions
mailing list