[erlang-questions] Bi-directional Java/Erlang socket communication?

Pablo Polvorin pablo.polvorin@REDACTED
Sat Sep 13 17:20:29 CEST 2008


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
----
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20080913/4d0fd3d3/attachment.htm>


More information about the erlang-questions mailing list