将字符串数据从Java/Erlang发送到Ada
我想用Java或Erlang创建一些接口,处理用户commads,创建字符串并将该字符串发送给Ada应用程序。我怎样才能以正确的方式做到这一点? 我试着用插座做这个,但没用? 如果您能提供一些示例代码或参考资料,我将不胜感激 以下是Ada任务服务器代码:将字符串数据从Java/Erlang发送到Ada,java,sockets,erlang,ipc,ada,Java,Sockets,Erlang,Ipc,Ada,我想用Java或Erlang创建一些接口,处理用户commads,创建字符串并将该字符串发送给Ada应用程序。我怎样才能以正确的方式做到这一点? 我试着用插座做这个,但没用? 如果您能提供一些示例代码或参考资料,我将不胜感激 以下是Ada任务服务器代码: 任务主体配置服务器为 接收器:GNAT.Sockets.Socket_型; 连接方式:GNAT.Sockets.Socket_型; 客户端:GNAT.Sockets.Sock\u Addr\u类型; 通道:GNAT.Sockets.Stream
任务主体配置服务器为
接收器:GNAT.Sockets.Socket_型;
连接方式:GNAT.Sockets.Socket_型;
客户端:GNAT.Sockets.Sock\u Addr\u类型;
通道:GNAT.Sockets.Stream\u访问;
S:无界_字符串;
C:性格;
开始
放置行(“服务器配置已启动…”);
GNAT.Sockets.Create_Socket(Socket=>Receiver);
GNAT.Sockets.Set_Socket_选项
(插座=>接收器,
Option=>(Name=>GNAT.Sockets.Reuse_Address,Enabled=>True));
GNAT.Sockets.Bind_Socket
(插座=>接收器,
地址=>(系列=>GNAT.Sockets.Family_Inet,
Addr=>地址(按主机名获取主机名,1),
端口=>2080);
GNAT.Sockets.Listen_Socket(Socket=>接收器);
环
GNAT.Sockets.Accept_Socket
(服务器=>接收器,
套接字=>连接,
地址=>客户);
Ada.Text\u IO.Put\u行
(“客户端连接自”&GNAT.Sockets.Image(客户端));
通道:=GNAT.Sockets.Stream(连接);
开始
环
C:=字符输入(通道);
如果C/='.'那么
附加(S,C);
其他的
放置行(“已接收:&S”);
设置\u无界\u字符串(“”);
如果结束;
端环;
例外
当Ada.IO_异常.End_错误=>
无效的
结束;
GNAT.Sockets.Close_插座(连接);
端环;
终端配置服务器;
Erlang代码:
-module (client).
-compile([export_all]).
sendMsg() ->
{ok, Socket} = gen_udp:open(2560),
gen_udp:send(Socket, {127,0,0,1}, 2080, "Hello"),
gen_udp:close(Socket).
Java代码:
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket("127.0.0.1", 2080);
} catch (IOException e) {
e.printStackTrace();
}
PrintStream output = null;
try {
output = new PrintStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
String input;
Scanner scanner = new Scanner(System.in);
do {
input = scanner.nextLine();
output.print(input);
}while (input.equalsIgnoreCase("EXIT"));
try {
output.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我认为问题在于Java和Erlang在虚拟环境中工作,我需要一些底层API来连接套接字。我说得对吗?我使用的是OSX,我从这开始工作 (美国残疾人协会) 事实证明,在OSX上,
Host\u Name
返回nidhoggr.local
(我的机器是以类似于龙的实体命名的,而我的时间很短),它有一个网络地址,192.168.1.74
<另一方面,代码>“localhost”确实为您提供了127.0.0.1
(爪哇)
(请参阅
!
)发布您尝试过的代码。Erlang代码似乎使用UDP,但Ada代码使用TCP。Java代码在退出之前只输出一行(但该行应该被发送)。“它不起作用”也帮不了我们。它以什么方式不起作用?是的,你是对的。当我在Erlang中创建TCP连接并更正Ada代码以使用下面提到的“localhost”时,它也可以工作。谢谢你的帮助。我很感谢你的帮助!它不起作用,因为主机名和错误的地址,就像你写的那样。
GNAT.Sockets.Bind_Socket
(Socket => Receiver,
Address => (Family => GNAT.Sockets.Family_Inet,
Addr => Addresses (Get_Host_By_Name (“localhost"), 1),
Port => 2080));
do {
input = scanner.nextLine();
output.print(input);
}while (!input.equalsIgnoreCase("EXIT"));