2011-06-24 42 views
0

我已經在windows上運行了Gui應用程序,並且我想連接到遠程unix機器並在那裏執行類似API的操作,瀏覽機器中的日誌文件併發送回應用程序最後一個日誌文件或我想要在遠程機器上執行的其他API。使用java的兩臺機器之間的通信

在遠程機器上,我沒有應用程序服務器,只是安裝了Java的應用程序服務器。

我想使用Java爲了在遠程機器上執行遠程API;

什麼是建議,我可以使用網絡服務,任何人都可以請指教。

在此先感謝。

回答

1

如果Java可以執行您正在討論的操作,我將使用Sockets與UNIX-Machine(通過TCP/IP)進行通信。

您的Windows PC將是客戶端發送命令到Unix-PC。

+0

+1:除非你一個很好的理由,否則做,我會用一個基於文本的協議,這樣你就可以輕鬆登錄並閱讀正在發送/收到什麼。 –

0

Web服務可能會有點笨重的選擇,尤其是如果你選擇SOAP的話。如果客戶端和服務器始終是Java,那麼RMI似乎是最簡單的解決方案,因爲它使用普通的方法調用機制在兩個不同的JVM之間進行通信(還有一些額外的接口和規則要遵循取悅RMI規範)。

0

對於分析遠程機器的日誌文件,您總是可以使用Apache Commons sftp以編程方式將遠程日誌文件的副本FTP傳輸到您的PC。

如果您將日誌文件配置爲可旋轉或每次達到特定大小時進行旋轉,則可以避免一遍又一遍地重新載入相同的信息。

0

Spring框架附帶一些remoting options,這些都很容易設置。您可以使用它們的類來更簡單地配置諸如RMI或JMS之類的標準,或者使用輕量級Web服務協議,例如Spring的HTTP調用者或Hessian。

0

您可以使用Ganymed SSH-2 for Java從客戶端Java應用程序ssh到遠程主機並運行命令。無需在遠程服務器上運行任何其他組件。您可以執行基於密碼的身份驗證或基於密鑰的身份驗證來登錄遠程主機。我們成功地使用它來管理在遠程UNIX主機上運行的應用程序(啓動/停止/ grep日誌文件等)。您可以使用包中提供的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); 
     } 
    } 
} 
+0

感謝您的回覆, 目前我正在使用Ganymed SSH來做到這一點,爲此,我一直必須發送請求作爲unix命令,如 sess.execCommand(「uname -a && date && uptime &&誰「) 如果我想在java代碼中使用重邏輯並在java中使用線程,那麼它的問題 – john

相關問題