使用java的两台机器之间的通信

时间:2011-06-24 17:28:00

标签: java

我编写了在Windows上运行的Gui Application,我希望连接到远程unix机器并执行API之类的操作,查看机器中的日志文件并将最后一个日志文件或其他文件发送回应用程序我想在远程计算机上执行的API。

在远程机器上,我没有应用程序服务器,我只安装了Java。

我想使用Java来通过远程机器执行远程API;

建议是什么,我可以使用网络服务,任何人都可以提供建议。

提前致谢。

5 个答案:

答案 0 :(得分:1)

如果Java可以执行您正在讨论的操作,我会使用Sockets与UNIX-Machine(通过TCP / IP)进行通信。

您的Windows-PC将是向Unix-PC发送命令的客户端。

答案 1 :(得分:0)

Web服务将是一个有点沉重的选择,尤其是如果您选择SOAP服务。如果您的客户端和服务器始终不是Java的问题,RMI似乎是解决此问题的最简单方法,因为它使用普通方法调用机制在两个不同的JVM之间进行通信(需要遵循一些额外的接口和规则)取悦RMI规范。)

答案 2 :(得分:0)

为了分析远程计算机的日志文件,您始终可以通过编程方式使用Apache Commons sftp将远程日志文件的副本FTP到您的PC。

如果您将日志文件配置为可旋转或每次达到特定大小时旋转,则可以避免反复重新加载相同的信息。

答案 3 :(得分:0)

Spring Framework附带了许多remoting options,这些都很容易设置。您可以使用它们的类来简化RMI或JMS之类的标准配置,或使用轻量级Web服务协议,例如Spring的HTTP调用程序或Hessian。

答案 4 :(得分:0)

您可以使用Ganymed SSH-2 for Java从Client Java App ssh到远程主机并运行命令。无需在远程服务器上运行任何其他组件。您可以执行基于密码的身份验证或基于密钥的身份验证来登录远程主机。我们已成功使用它来管理(启动/停止/ grep日志文件等)在远程UNIX主机上运行的应用程序。您可以使用程序包中提供的StreamGobbler类捕获远程命令的输出。您可以在一次远程调用中传递由分号分隔的多个命令。

包中包含的基本示例:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;

public class Basic
{
    public static void main(String[] args)
    {
        String hostname = "127.0.0.1";
        String username = "joe";
        String password = "joespass";

        try
        {
            /* Create a connection instance */

            Connection conn = new Connection(hostname);

            /* Now connect */

            conn.connect();

            /* Authenticate.
             * If you get an IOException saying something like
             * "Authentication method password not supported by the server at this stage."
             * then please check the FAQ.
             */

            boolean isAuthenticated = conn.authenticateWithPassword(username, password);

            if (isAuthenticated == false)
                throw new IOException("Authentication failed.");

            /* Create a session */

            Session sess = conn.openSession();

            sess.execCommand("uname -a && date && uptime && who");

            System.out.println("Here is some information about the remote host:");

            /* 
             * This basic example does not handle stderr, which is sometimes dangerous
             * (please read the FAQ).
             */

            InputStream stdout = new StreamGobbler(sess.getStdout());

            BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

            while (true)
            {
                String line = br.readLine();
                if (line == null)
                    break;
                System.out.println(line);
            }

            /* Show exit status, if available (otherwise "null") */

            System.out.println("ExitCode: " + sess.getExitStatus());

            /* Close this session */

            sess.close();

            /* Close the connection */

            conn.close();

        }
        catch (IOException e)
        {
            e.printStackTrace(System.err);
            System.exit(2);
        }
    }
}