Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串数据从Java/Erlang发送到Ada_Java_Sockets_Erlang_Ipc_Ada - Fatal编程技术网

将字符串数据从Java/Erlang发送到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

我想用Java或Erlang创建一些接口,处理用户commads,创建字符串并将该字符串发送给Ada应用程序。我怎样才能以正确的方式做到这一点? 我试着用插座做这个,但没用? 如果您能提供一些示例代码或参考资料,我将不胜感激

以下是Ada任务服务器代码:

任务主体配置服务器为
接收器: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"));