Ich möchte eine Schnittstelle in Java oder Erlang erstellen, die Commands von Benutzern verarbeiten, Zeichenfolge erstellen und diese Zeichenfolge an Ada-Anwendung senden. Wie kann ich das richtig machen? Ich habe versucht, dies mit Sockets zu tun, aber es funktioniert nicht? Es wäre Ihnen dankbar, wenn Sie mir einen Beispielcode oder einige Referenzen zur Verfügung stellen könnten.Sendet Daten von Java/Erlang an Ada
Hier Code Server Ada Aufgabe:
task body ConfigServer is
Receiver : GNAT.Sockets.Socket_Type;
Connection : GNAT.Sockets.Socket_Type;
Client : GNAT.Sockets.Sock_Addr_Type;
Channel : GNAT.Sockets.Stream_Access;
S : Unbounded_String;
C : Character;
begin
Put_Line("SERVER CONFIG STARTED...");
GNAT.Sockets.Create_Socket (Socket => Receiver);
GNAT.Sockets.Set_Socket_Option
(Socket => Receiver,
Option => (Name => GNAT.Sockets.Reuse_Address, Enabled => True));
GNAT.Sockets.Bind_Socket
(Socket => Receiver,
Address => (Family => GNAT.Sockets.Family_Inet,
Addr => Addresses (Get_Host_By_Name (Host_Name), 1),
Port => 2080));
GNAT.Sockets.Listen_Socket (Socket => Receiver);
loop
GNAT.Sockets.Accept_Socket
(Server => Receiver,
Socket => Connection,
Address => Client);
Ada.Text_IO.Put_Line
("Client connected from " & GNAT.Sockets.Image (Client));
Channel := GNAT.Sockets.Stream (Connection);
begin
loop
C := Character'Input (Channel);
if C /= '.' then
Append(S, C);
else
Put_Line("Received: " & S);
Set_Unbounded_String(S, "");
end if;
end loop;
exception
when Ada.IO_Exceptions.End_Error =>
null;
end;
GNAT.Sockets.Close_Socket (Connection);
end loop;
end ConfigServer;
Erlang Code:
-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-Code:
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();
}
}
}
Ich denke, das Problem ist, dass Java und Erlang in virtuellen Arbeits environemnt und ich brauche eine Low-Level-API zu Sockets. Habe ich recht?
Schreibe den Code, den Sie versucht haben. –
Der Erlang-Code scheint UDP zu verwenden, aber der Ada-Code verwendet TCP. Der Java-Code gibt nur eine Zeile vor dem Beenden aus (aber diese Zeile sollte gesendet werden). ** Und **, "es funktioniert nicht" hilft uns nicht. Wie funktioniert es nicht? –
Ja, du hast Recht. Wenn ich TCP-Verbindung in Erlang erstellte und Ada-Code korrigierte, um "localhost" wie unten erwähnt zu verwenden, funktioniert es auch. Danke für die Hilfe. – michalk93