JavaまたはErlangでインターフェースを作成し、ユーザーcommadsを処理し、文字列を作成し、この文字列をAdaアプリケーションに送信したいと考えています。私はそれをどのようにして適切に行うことができますか? 私はソケットでこれをしようとしましたが動作しませんか? サンプルコードや参考文献を私に教えていただければ幸いです。ここでJava/ErlangからAdaに文字列データを送信
はエイダタスクServerコードです:
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コード:
-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をソケットに必要としています。私は正しい?
ポストあなたが試したコード(
!
を参照してください)。 –ErlangコードはUDPを使用しているようですが、AdaコードはTCPを使用しています。 Javaコードは、終了する前に1行だけを出力します(ただし、その行は送信されます)。 **そして**、 "それはうまくいかない"私たちを助けません。どのようにして動作しませんか? –
はい、そうです。 ErlangでTCP接続を作成し、以下に述べるように "localhost"を使用するようにAdaコードを修正したところ、それもうまく動作します。手伝ってくれてありがとう。 – michalk93