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

Dan Rubino <>
Sat Sep 13 15:59:11 CEST 2008

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.";


	BufferedReader in = new BufferedReader(new

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:

	true ->
	    {ok, Socket} = gen_tcp:accept(Listen),
	    try gen_tcp:accept(Listen) of
		{ok, Socket} ->
		    spawn(fun() -> parallel_loop(Listen, CallBackMod) end),

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"),
	Val ->
	    io:format("Val: ~p~n", [Val])

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!


More information about the erlang-questions mailing list