Linux 環境で動作するスタンドアロン アプリケーション (.jar) を開発しました。このアプリケーションをサーバー (Linux) に保持し、他のシステムからアクセスしたいと考えています。
これが可能かどうか提案してください。
Linux 環境で動作するスタンドアロン アプリケーション (.jar) を開発しました。このアプリケーションをサーバー (Linux) に保持し、他のシステムからアクセスしたいと考えています。
これが可能かどうか提案してください。
Java Webstartを検討しましたか? これにより、クライアントは Web サーバーからアプリケーションをダウンロードしてローカルで実行できるようになります。
これは伝統的に GUI (Swing など) アプリで使用されますが、私はデーモンとサーバー プロセスをローカルで実行するために使用しました。
アプリケーションの更新を自動的に処理するため、クライアントは必要な場合にのみバージョンをダウンロードします。それ以外の場合は、ローカルにキャッシュされたバージョンにアクセスします。
Linux システムは Berkeley ソケット API を実装しているため、他のマシンとの通信を開くことができます。
このために、パッケージ java.net を使用できます。ソケット接続には、Socket、ServerSocket、および SocketAddress を使用できます。
Socket はクライアントに使用され、ServerSocket はソケット サーバーの作成に使用され、SocketAddress はターゲット ソケットとして使用される情報を提供するために使用されます。
例として、以下のプロジェクトを見つけてください。
最初のプロジェクト SocketServerApp.java - これをビルドしてから java -jar SocketServerApp.jar を実行します
package socketserverapp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServerApp {
public static void main(String[] args) throws IOException {
//we defines all the variables we need
ServerSocket server = null;
Socket client = null;
byte[] receivedBuff = new byte[64];
int receivedMsgSize;
try
{
//activate port 8881 as our socket server
server = new ServerSocket(8881);
System.out.println("Server started");
//receiving connection from client
client = server.accept();
System.out.println("Client connected");
}
catch (IOException e)
{
System.out.println(e.getMessage());
System.exit(-1);
}
//prepare data stream
InputStream in = client.getInputStream();
OutputStream out = client.getOutputStream();
//greet user if there is a client connection
String data;
data = "Hello from the Server!";
out.write(data.getBytes());
//accepting data from client and display it in the console.
java.util.Arrays.fill(receivedBuff, (byte)0);
while (true) {
receivedMsgSize = in.read(receivedBuff);
data = new String(receivedBuff);
//if client type "exit", then exit loop and close everything
if (data.trim().equals("exit"))
{
out.write(data.getBytes());
break;
}
java.util.Arrays.fill(receivedBuff, (byte)0);
System.out.println ("Client: " + data);
}
//close all resources before exiting
out.close();
in.close();
client.close();
server.close();
}
}
2 番目のプロジェクトは SocketClientApp.java です - これをビルドしてから java -jar SocketClientApp.jar を実行します
package socketclientapp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketClientApp {
public static void main(String[] args) throws IOException {
Socket client = null;
InputStream in = null;
OutputStream out = null;
byte[] receivedMsg = new byte[64];
try {
client = new Socket("localhost", 8881);
in = client.getInputStream();
out = client.getOutputStream();
} catch (UnknownHostException e) {
System.err.println(e.getMessage());
System.exit(1);
} catch (IOException e) {
System.err.println(e.getMessage());
System.exit(1);
}
String fromServer;
String fromUser;
in.read(receivedMsg);
fromServer = new String(receivedMsg);
System.out.println("Server: " + fromServer);
fromUser = "Hello from Client";
System.out.println("Sent to server: " + fromUser);
out.write(fromUser.getBytes());
fromUser = "exit";
out.write(fromUser.getBytes());
System.out.println("Sent to server: " + fromUser);
out.close();
in.close();
client.close();
}
}
簡単に言うと、これは TCP/IP 通信です。このタイプの通信方法は、多くの種類のソフトウェアを持つ企業では非常に一般的です。
それが役立つことを願っています。