3

Linux 環境で動作するスタンドアロン アプリケーション (.jar) を開発しました。このアプリケーションをサーバー (Linux) に保持し、他のシステムからアクセスしたいと考えています。

これが可能かどうか提案してください。

4

2 に答える 2

6

Java Webstartを検討しましたか? これにより、クライアントは Web サーバーからアプリケーションをダウンロードしてローカルで実行できるようになります。

これは伝統的に GUI (Swing など) アプリで使用されますが、私はデーモンとサーバー プロセスをローカルで実行するために使用しました。

アプリケーションの更新を自動的に処理するため、クライアントは必要な場合にのみバージョンをダウンロードします。それ以外の場合は、ローカルにキャッシュされたバージョンにアクセスします。

于 2012-06-26T10:37:35.213 に答える
1

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 通信です。このタイプの通信方法は、多くの種類のソフトウェアを持つ企業では非常に一般的です。

それが役立つことを願っています。

于 2012-06-26T11:48:34.757 に答える