當前位置:首頁 » 編程軟體 » java調用遠程腳本

java調用遠程腳本

發布時間: 2023-10-05 19:12:19

java linux遠程調用win執行UI

java通過winrm4j遠程連接win執行命令
在Linux /UNIX/WINDOWS系統中,一般通過遠程連接的方式在遠端執行腳本命令或者其他,是通過SSH或者Telnet。筆者之前寫伍塌過幾遍運用JAVA使用SSH或者TELNET連接操作系統執行命令的博客。但這些協議之間存在的差別的。
在LINUX、UNIX系統中一般通過SSH協議來登錄、執行命令;
而在Windows操作系統中,由於沒有自帶SSH協議,一般通過Telnet協議去登錄、執行命者賀令;但是Telnet服務默認是不開啟的。所以在大規模環境中,操作比較麻煩。另外Telnet協議存在安全問題。
如腔嫌圓果不需要執行命令,而是通過遠程桌面的形式來操作windows,可以使用RDP協議,java有一個開源的項目properJavaRDP,可以在web頁面或者GUI形式提供實現方案。

Ⅱ 如何通過java代碼觸發遠程伺服器上的python程序

有幾個通用方法:

  1. 使用webservice技術建立跨語言介面調用,由java程序發啟並調用pyhon程序

  2. 使用mq,以消息做為調用方式,python程序在接收到mq消息後觸發相應的程序

  3. 使用Runtime.getRuntime().exec()直接執行.py程序

Ⅲ java遠程調用介面的原理和範例,謝謝

Java 遠程處理
Java遠程方法調用(RMI)提供了Java程序語言的遠程通訊功能,這種特性使客戶機上運行的程序可以調用遠程伺服器上的對象,使Java編程人員能夠在網路環境中分布操作。
創建一個簡單的Java分布式遠程方法調用程序可以按以下幾個步驟操作,

一、定義遠程介面:
在 Java 中,遠程對象是實現遠程介面的類的實例, 遠程介面聲明每個要遠程調用的方法。在需要創建一個遠程對象的時候,我們通過傳遞一個介面來隱藏基層的實施細節,客戶通過介面句柄發送消息即可。
遠程介面具有如下特點:
1) 遠程介面必須為public屬性。如果不這樣,除非客戶端與遠程介面在同一個包內,否則 當試圖裝入實現該遠程介面的遠程對象時,調用會得到錯誤結果。
2) 遠程介面必須擴展介面java.rmi.Remote。
3) 除與應用程序本身特定的例外之外,遠程介面中的每個方法都必須在自己的throws從句中 聲明java.rmi.RemoteException。(或 RemoteException 的父類)。
4) 作為參數或返回值傳遞的一個遠程對象(不管是直接,還是本地對象中嵌入)必須聲明為遠 程介面,而不應聲明為實施類。

下面是遠程介面的定義

[java] view plain
package test;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.math.BigInteger;

public interface Fib extends Remote {
public int getFib(int n) throws RemoteException;
// public BigInteger getFib(BigInteger n) throws RemoteException;
}

二、實現遠程介面:
遠程對象實現類必須擴展遠程對象java.rmi.UnicastRemoteObject類,並實現所定義的遠程介面。遠程對象的實現類中包含實現每個遠程介面所指定的遠程方法的代碼。這個類也可以含有附加的方法,但客戶只能使用遠程介面中的方法。因為客戶是指向介面的一個句柄,而不是它的哪個類。必須為遠程對象定義構造函數,即使只准備定義一個默認構造函數,用它調用基礎類構造函數。因為基礎類構造函數可能會拋出 java.rmi.RemoteException,所以即使別無它用必須拋出java.rmi.RemoteException例外。
以下是遠程對象實現類的聲明:

[java] view plain
package test;
import java.math.BigInteger;
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;

public class FibImp extends UnicastRemoteObject implements Fib {
public FibImp() throws RemoteException {
super();
}

public int getFib(int n) throws RemoteException {
return n+2;
}

}

三、編寫伺服器類:
包含 main 方法的類可以是實現類自身,也可以完全是另一個類。下面通過RmiSampleServer 來創建一個遠程對象的實例,並通過java.rmi.registry.LocateRegistry類的createRegistry 方法從指定埠號啟動注冊服務程序,也可以通過執行 rmiregistry 命令啟動注冊服務程序,注冊服務程序的預設運行埠為 1099。必須將遠程對象名字綁定到對遠程對象的引用上: Naming.rebind("//localhost:8808/SAMPLE-SERVER" , Server);
以下是伺服器類的聲明:

[java] view plain
package test;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
public class FibonacciServer {
/**
* @param args
*/
public static void main(String[] args) {
try {
LocateRegistry.createRegistry(8804);
FibImp f = new FibImp();

// 注冊到 registry 中
Naming.rebind("//localhost:8804/SAMPLE-SERVER", f);
System.out.println("fib server ready");

} catch (RemoteException re) {
System.out.println("Exception in FibonacciImpl.main: " + re);
} catch (MalformedURLException e) {
System.out.println("MalformedURLException " + e);
}
}
}

四、編寫使用遠程服務的客戶機類:
客戶機類的主要功能有兩個,一是通過Naming.lookup方法來構造注冊服務程序 stub 程序實例,二是調用伺服器遠程對象上的遠程方法。
以下是客戶端類的聲明:

[java] view plain
package testClient;

import test.Fib;
import java.math.BigInteger;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
public class FibClient {
/**
* @param args
*/
public static void main(String[] args) {
String url = "//localhost:8804/SAMPLE-SERVER";
try {

Fib calc = (Fib) Naming.lookup(url);
for (int i = 0; i < 10; ++i) {
int f = calc.getFib(i);
System.out.println(f);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
}

Ⅳ JAVA 遠程 調用的幾種實現方式簡析 詳細�0�3

基本原理 要實現網路機器間的通訊,首先得來看看計算機系統網路通信的基本原理,在底層層面去看,網路通信需要做的就是將流從一台計算機傳輸到另外一台計算機,基於傳輸協議和網路 IO 來實現,其中傳輸協議比較出名的有 http、tcp、 udp 等等,http、tcp、udp 都是在基於Socket 概念上為某類應用場景而擴展出的傳輸協議,網路IO,主要有bio、nio、aio 三種方式,所有的分布式應用通訊都基於這個原理而實現,只是為了應用的易用,各種語言通常都會提供一些更為貼近應用易用的應用層協議。 應用級協議 遠程服務通訊,需要達到的目標是在一台計算機發起請求,另外一台機器在接收到請求後進行相應的處理並將結果返回給請求端,這其中又會有諸如 onewayrequest、同步請求、非同步請求等等請求方式,按照網路通信原理,需要實現這個需要做的就是將請求轉換成流,通過傳輸協議傳輸至遠端,遠端計算機在接收到請求的流後進行處理,處理完畢後將結果轉化為流,並通過傳輸協議返回給調用端。原理是這樣的,但為了應用的方便,業界推出了很多基於此原理之上的應用級的協議,使得大家可以不用去直接操作這么底層的東西,通常應用級的遠程通信協議會提供: 1.為了避免直接做流操作這么麻煩,提供一種更加易用或貼合語言的標准傳輸格式;2.網路通信機制的實現,就是替你完成了將傳輸格式轉化為流,通過某種傳輸協議傳輸至遠端計算機,遠端計算機在接收到流後轉化為傳輸格式,並進行存儲或以某種方式通知遠端計算機。 所以在學習應用級的遠程通信協議時,我們可以帶著這幾個問題進行學習: 1.傳輸的標准格式是什麼?2.怎麼樣將請求轉化為傳輸的流?3.怎麼接收和處理流?4.傳輸協議是? 不過應用級的遠程通信協議並不會在傳輸協議上做什麼多大的改進,主要是在流操作方面,讓應用層生成流和處理流的這個過程更加的貼合所使用的語言或標准,至於傳輸協議則通常都是可選的,在java 領域中知名的有:RMI、 XML-RPC、Binary-RPC、SOAP、CORBA、JMS,來具體的看看這些遠程通信的應用級協議: RMIRMI 是個典型的為java 定製的遠程通信協議,我們都知道,在 singlevm 中,我們可以通過直接調用javaobjectinstance 來實現通信,那麼在遠程通信時,如果也能按照這種方式當然是最好了,這種遠程通信的機製成為RPC(RemoteProcereCall),RMI 正是朝著這個目標而誕生的。 來看下基於RMI 的一次完整的遠程通信過程的原理: 1.客戶端發起請求,請求轉交至RMI 客戶端的stub 類;2.stub 類將請求的介面、方法、參數等信息進行序列化;3.基於socket 將序列化後的流傳輸至伺服器端;4.伺服器端接收到流後轉發至相應的skelton 類;5.skelton 類將請求的信息反序列化後調用實際的處理類;6.處理類處理完畢後將結果返回給 skelton 類;7.Skelton 類將結果序列化,通過socket 將流傳送給客戶端的 stub;8.stub 在接收到流後反序列化,將反序列化後的JavaObject 返回給調用者。 根據原理來回答下之前學習應用級協議帶著的幾個問題: 1.傳輸的標准格式是什麼?是JavaObjectStream。2.怎麼樣將請求轉化為傳輸的流?基於Java 串列化機制將請求的javaobject 信息轉化為流。3.怎麼接收和處理流?根據採用的協議啟動相應的監聽埠,當有流進入後基於Java 串列化機制將流進行反序列化,並根據RMI 協議獲取到相應的處理對象信息,進行調用並處理,處理完畢後的結果同樣基於java 串列化機制進行返回。4.傳輸協議是?Socket。 XML-RPCXML-RPC 也是一種和RMI 類似的遠程調用的協議,它和RMI 的不同之處在於它以標準的 xml 格式來定義請求的信息(請求的對象、方法、參數等),這樣的好處是什麼呢,就是在跨語言通訊的時候也可以使用。 來看下XML-RPC 協議的一次遠程通信過程: 1.客戶端發起請求,按照XML-RPC 協議將請求信息進行填充;2.填充完畢後將xml 轉化為流,通過傳輸協議進行傳輸;3.接收到在接收到流後轉換為xml,按照XML-RPC 協議獲取請求的信息並進行處理;4.處理完畢後將結果按照XML- RPC 協議寫入xml 中並返回。 同樣來回答問題: 1.傳輸的標准格式是?標准格式的XML。2.怎麼樣將請求轉化為傳輸的流? 將XML 轉化為流。3.怎麼接收和處理流?通過監聽的埠獲取到請求的流,轉化為XML,並根據協議獲取請求的信息,進行處理並將結果寫入XML 中返回。4. 傳輸協議是?Http。 Binary-RPCBinary-RPC 看名字就知道和XML-RPC 是差不多的了,不同之處僅在於傳輸的標准格式由XML 轉為了二進制的格式。 同樣來回答問題: 1.傳輸的標准格式是?標准格式的二進制文件。2.怎麼樣將請求轉化為傳輸的流?將二進制格式文件轉化為流。3.怎麼接收和處理流?通過監聽的埠獲取到請求的流,轉化為二進制文件,根據協議獲取請求的信息,進行處理並將結果寫入XML 中返回。4.傳輸協議是?Http。 SOAPSOAP 原意為SimpleObjectAccessProtocol,是一個用於分布式環境的、輕量級的、基於XML 進行信息交換的通信協議,可以認為SOAP 是XMLRPC 的高級版,兩者的原理完全相同,都是http+XML,不同的僅在於兩者定義的XML 規范不同,SOAP 也是Webservice 採用的服務調用協議標准,因此在此就不多加闡述了。 (公用對象請求代理[調度]程序體系結構),是一組用來定義"分布式對象系統"的標准,由 OMG(ObjectMenagementGroup)作為發起和標准制定單位。CORBA 的目的是定義一套協議,符合這個協議的對象可以互相交互,不論它們是用什麼樣的語言寫的,不論它們運行於什麼樣的機器和操作系統。CORBA 在我看來是個類似於SOA 的體系架構,涵蓋可選的遠程通信協議,但其本身不能列入通信協議這里來講,而且CORBA 基本淘汰,再加上對CORBA 也不怎麼懂,在此就不進行闡述了。 JMSJMS 呢,是實現java 領域遠程通信的一種手段和方法,基於JMS 實現遠程通信時和RPC 是不同的,雖然可以做到RPC 的效果,但因為不是從協議級別定義的,因此我們不認為JMS 是個RPC 協議,但它確實是個遠程通信協議,在其他的語言體系中也存在著類似JMS 的東西,可以統一的將這類機制稱為消息機制,而消息機制呢,通常是高並發、分布式領域推薦的一種通信機制,這里的主要一個問題是容錯(詳細見ErLang 論文)。 來看JMS 中的一次遠程通信的過程: 1.客戶端將請求轉化為符合JMS 規定的Message;2.通過JMSAPI 將Message 放入JMSQueue 或Topic 中;3.如為JMSQueue,則發送中相應的目標Queue 中,如為Topic,則發送給訂閱了此Topic 的JMSQueue。4.處理端則通過輪訓 JMSQueue,來獲取消息,接收到消息後根據JMS 協議來解析Message 並處理。 回答問題: 1.傳輸的標准格式是?JMS 規定的Message。2.怎麼樣將請求轉化為傳輸的流?將參數信息放入Message 中即可。3.怎麼接收和處理流?輪訓JMSQueue 來接收Message,接收到後進行處理,處理完畢後仍然是以Message 的方式放入 Queue 中發送或Multicast。4.傳輸協議是?不限。 基於JMS 也是常用的實現遠程非同步調用的方法之一。

Ⅳ 如何用java程序啟動遠程的linux服務

你得明白,啟動遠程的服務,首先得連接到伺服器上去。
下面有兩種方法:1、通過自定義程序;
2、使用現成的telnet或ssh(推薦)

方法1、首先得看linux伺服器的限制,如果伺服器允許自定義的登錄,
並且你在伺服器上運行了一個監聽某埠(如1234)的程序,
寫一個client端,用socket連接上去,就可以執行了。

方法2、如果伺服器支持ssh或者telnet登錄,且
允許遠程執行腳本的話,可以直接登錄進去(當然這算是
使用現成的程序吧,ssh更安全,不過或許不是你想要的。)

有現成的ssh服務,直接使用就是了,自己寫的肯定沒這個安全~~
要用java的話,應該也有現成的ssh客戶端---

Ⅵ java如何遠程調用。。。。。。。。。

RMI遠程調用。你查一下這個。

或是webservices

下邊是一個例子,運行server,
再運行client,可以得到對象。
-------------------------------------------------------

import java.rmi.Remote;
import java.rmi.registry.LocateRegistry;
import java.util.Date;

import javax.naming.Context;
import javax.naming.InitialContext;

public class Server {

public static void main(String[] args) throws Exception {
LocateRegistry.createRegistry(2099);
System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.rmi.registry.RegistryContextFactory");
System.setProperty(Context.PROVIDER_URL, "rmi://localhost:2099");
Context ctx = new InitialContext();

ctx.bind("systemStartTime", new RemoteDate());
ctx.close();

while (true)
Thread.sleep(1000);

}

}

class RemoteDate extends Date implements Remote {
}

--------------------

import java.util.Date;

import javax.naming.Context;
import javax.naming.InitialContext;

public class Client {

public static void main(String[] args) throws Exception {
Context ctx = new InitialContext();
Date startTime = (Date) ctx
.lookup("rmi://localhost:2099/systemStartTime");
System.out.println(startTime);

}

}

Ⅶ 如何實現遠程調試java代碼

1. 遠程debug調試java代碼

1.1 主動連接調試

首先需要遠程服務配置啟動腳本:

JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"
如果是啟動jar包,指令:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 -jar test.jar

這里-Xdebug是通知JVM工作在DEBUG模式下,-Xrunjdwp是通知JVM使用(java debug wire protocol)來運行調試環境。
transport是監聽Socket埠連接方式(也可以dt_shmem共享內存方式,但限於windows機器,並且服務提供端和調試端只能位於同一台機)。
server=y表示當前是調試服務端,=n表示當前是調試客戶端。suspend=n表示啟動時不中斷(如果啟動時中斷,一般用於調試啟動不了的問題)。
address=8000表示本地監聽8000埠。
遠程服務(tomcat/jboss)啟動成功後,本地Eclipse對需要調試的地方打上斷點,
然後項目右鍵啟動遠程調試:Debug as->Debug Configurations->Remote Java Application。
Host為遠程主機IP,Port為遠程監聽調試埠,Connection Type為:Standard(Socket Attach),

點擊Debug,然後打斷點,遠程服務運行到斷點處本地就會中斷,然後進行調試。

1.2 被動連接調試

首先需要Eclipse配置監聽,如主動連接調試的Eclipse配置圖片,Connection Type選擇:
Standard(Socket Listen),配置本地監聽埠,比如默認8000。點擊Debug開始等待遠程連接調試。

然後配置遠程服務啟動腳本:

JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y"

如果是調試jar包,指令:

java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y -jar remoting-debug.jar

參數含義和主動連接調試一樣,只是這里suspend=y表示啟動時就中斷,需要連接本地IDE調試啟動。
address=ip:port,ip需要修改為本地的對外IP。

這樣遠程項目啟動時就連接到本地,方便調試項目啟動不了的問題。

熱點內容
java的加減乘除 發布:2024-11-18 16:50:35 瀏覽:582
nginx怎麼訪問php 發布:2024-11-18 16:22:55 瀏覽:303
螞蟻外快賺錢腳本 發布:2024-11-18 16:21:52 瀏覽:178
cnc編程培訓學習 發布:2024-11-18 16:16:33 瀏覽:405
android查看工具 發布:2024-11-18 16:03:46 瀏覽:893
目前安卓11如何安裝 發布:2024-11-18 15:55:06 瀏覽:236
安卓結構光對比蘋果哪個快 發布:2024-11-18 15:50:03 瀏覽:930
天天酷跑3v3掛機腳本 發布:2024-11-18 15:43:02 瀏覽:461
pythonif字元串不等於 發布:2024-11-18 15:32:34 瀏覽:435
vr上用什麼存儲晶元 發布:2024-11-18 14:57:39 瀏覽:618