2010-11-09 35 views

回答

2

如果jinterface太复杂,你可能只需要使用上open_port包选项,并使用

byte[] in_buf = new byte[256]; 
byte[] out_buf = new byte[256]; 
int in_count = System.in.read(); 
int offset = 0; 
do 
    { 
     int c = System.in.read (in_buf, offset, in_count-offset); 
     offset += c; 
    } 
while (offset < in_count); 

来读取数据包二郎并写出用途:

System.out.write(out_count); 
System.out.write(out_buf, 0, out_count); 

在二郎侧,这将匹配

open_port({spawn, "<path-to-java> -cp <classpath> your-java-prog", 
      [{packet, 1}]). 

如果您需要更大的数据包,请使用{packet,2}或{packet,4}并调整java。 在数据包内部,您可以在双方运行任何您喜欢的协议。

3

除了通过OTP jinterface经典的Java-二郎沟通你可以研究这些方法,如:

- thrift 
- ice from zeroC (no official erlang binding) 
- maybe two http servers on both sides (I like this approach) 
- protocol buffers (rather not, it is better for larger data transfers) 

你需要了解你的流量的形状,并选择最佳的解决方案。 Jinterface并没有那么糟糕,寿..(这里是官方文档:http://www.erlang.org/doc/apps/jinterface/jinterface_users_guide.html

+1

+1 [Thrift](http://thrift.apache.org/)。 – 2010-11-09 14:18:04

+0

好东西!谢谢 – Handsken 2010-11-12 08:41:55

+0

我设法从Erlang发送消息到Java并成功接收它们。 [主要来自这个例子] [1]。 但我想要的主要事情是相反的。 从Java发送到Erlang。 我有一些猜测,我必须返回一个消息给我从Erlang得到的Pid。 [1]:http://pdincau.wordpress.com/2010/01/07/how-to-create-a-java-erlang-node-with-jinterface/ – Handsken 2011-11-03 10:47:33

1

我正在处理类似于你的应用程序:C++ GUI和Erlang服务器。我使用TCP套接字在GUI和服务器之间交换消息,并使用Erlang服务器模式处理请求(我可能同时将多个GUI连接到服务器)。