直接給你java關于telnet的一個例子
在景東等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供成都網站設計、網站建設 網站設計制作定制網站開發,公司網站建設,企業網站建設,品牌網站建設,網絡營銷推廣,外貿網站制作,景東網站建設費用合理。
public?class?Main?{????public?static?void?main(String[]?args)?{????????try?{
TelnetClient?telnetClient?=?new?TelnetClient("vt200");??//指明Telnet終端類型,否則會返回來的數據中文會亂碼
telnetClient.setDefaultTimeout(5000);?//socket延遲時間:5000ms
telnetClient.connect("127.0.0.1",23);??//建立一個連接,默認端口是23
InputStream?inputStream?=?telnetClient.getInputStream();?//讀取命令的流
PrintStream?pStream?=?new?PrintStream(telnetClient.getOutputStream());??//寫命令的流
byte[]?b?=?new?byte[1024];????????????int?size;
StringBuffer?sBuffer?=?new?StringBuffer(300);????????????while(true)?{?????//讀取Server返回來的數據,直到讀到登陸標識,這個時候認為可以輸入用戶名
size?=?inputStream.read(b);????????????????if(-1?!=?size)?{
sBuffer.append(new?String(b,0,size));????????????????????if(sBuffer.toString().trim().endsWith("login:"))?{????????????????????????break;
}
}
}
System.out.println(sBuffer.toString());
pStream.println("exit");?//寫命令
pStream.flush();?//將命令發送到telnet?Server
if(null?!=?pStream)?{
pStream.close();
}
telnetClient.disconnect();
}?catch?(SocketException?e)?{????????????//?TODO?Auto-generated?catch?block????????????e.printStackTrace();
}?catch?(IOException?e)?{????????????//?TODO?Auto-generated?catch?block????????????e.printStackTrace();
}
}
}
package org.shirdrn.shell;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
/**
* 遠程Shell腳本執行工具
*
* @author Administrator
*/
public class RemoteShellTool {
private Connection conn;
private String ipAddr;
private String charset = Charset.defaultCharset().toString();
private String userName;
private String password;
public RemoteShellTool(String ipAddr, String userName, String password, String charset) {
this.ipAddr = ipAddr;
this.userName = userName;
this.password = password;
if(charset != null) {
this.charset = charset;
}
}
/**
* 登錄遠程Linux主機
*
* @return
* @throws IOException
*/
public boolean login() throws IOException {
conn = new Connection(ipAddr);
conn.connect(); // 連接
return conn.authenticateWithPassword(userName, password); // 認證
}
/**
* 執行Shell腳本或命令
*
* @param cmds 命令行序列
* @return
*/
public String exec(String cmds) {
InputStream in = null;
String result = "";
try {
if (this.login()) {
Session session = conn.openSession(); // 打開一個會話
session.execCommand(cmds);
in = session.getStdout();
result = this.processStdout(in, this.charset);
conn.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
return result;
}
/**
* 解析流獲取字符串信息
*
* @param in 輸入流對象
* @param charset 字符集
* @return
*/
public String processStdout(InputStream in, String charset) {
byte[] buf = new byte[1024];
StringBuffer sb = new StringBuffer();
try {
while (in.read(buf) != -1) {
sb.append(new String(buf, charset));
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
}
項目的部署方式有在本地搭建服務器進行啟動或是debug,或是將項目在遠程服務器上面部署。一般如果在本地搭建服務器的時候,可以直接選擇啟動或是直接debug,但是如果項目部署在遠程的服務器上面的時候, 我們該如何進行調試呢?而一些大公司的項目是不需要在本地搭建應用服務器的,為了環境統一,應用服務器都是在遠程服務器上面,這時我們就需要用遠程debug,通過遠程服務器的ip地址和遠程開啟的debug端口進行調試:
1.首先把遠程服務器上面需要調試的代碼放在IDE里面
2.在菜單欄選擇run -edit Configuration,點擊+號,選擇remote,然后在配置項里面輸入遠程需要調試機器的IP地址和所對應的端口號,最后在最上面輸入該次一遠程調試的項目名字,方便自己區分不同的項目
3.將配置項中的-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5080添加到JAVA_OPTS的屬性中,重啟遠程tomcat服務器
3.再次選擇菜單條run按鈕,找到debug+“自己設置的項目名字”,點擊然后就可以進行遠程debug調試
4.在本地項目中設置斷點,然后訪問遠程機器上面的IP和端口,然后就可以在本地debug調試了
有幾個通用方法:
使用webservice技術建立跨語言接口調用,由java程序發啟并調用pyhon程序
使用mq,以消息做為調用方式,python程序在接收到mq消息后觸發相應的程序
使用Runtime.getRuntime().exec()直接執行.py程序
Java 遠程處理
Java遠程方法調用(RMI)提供了Java程序語言的遠程通訊功能,這種特性使客戶機上運行的程序可以調用遠程服務器上的對象,使Java編程人員能夠在網絡環境中分布操作。
創建一個簡單的Java分布式遠程方法調用程序可以按以下幾個步驟操作,
一、定義遠程接口:
在 Java 中,遠程對象是實現遠程接口的類的實例, 遠程接口聲明每個要遠程調用的方法。在需要創建一個遠程對象的時候,我們通過傳遞一個接口來隱藏基層的實施細節,客戶通過接口句柄發送消息即可。
遠程接口具有如下特點:
1) 遠程接口必須為public屬性。如果不這樣,除非客戶端與遠程接口在同一個包內,否則 當試圖裝入實現該遠程接口的遠程對象時,調用會得到錯誤結果。
2) 遠程接口必須擴展接口java.rmi.Remote。
3) 除與應用程序本身特定的例外之外,遠程接口中的每個方法都必須在自己的throws從句中 聲明java.rmi.RemoteException。(或 RemoteException 的父類)。
4) 作為參數或返回值傳遞的一個遠程對象(不管是直接,還是本地對象中嵌入)必須聲明為遠 程接口,而不應聲明為實施類。
下面是遠程接口的定義
[java] view plaincopy
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 plaincopy
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("http://localhost:8808/SAMPLE-SERVER" , Server);
以下是服務器類的聲明:
[java] view plaincopy
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("http://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 plaincopy
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 = "http://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();
}
}
}
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代碼發遠程 java實現遠程控制
URL地址:http://m.newbst.com/article36/hjppsg.html
成都網站建設公司_創新互聯,為您提供做網站、企業網站制作、響應式網站、品牌網站建設、云服務器、標簽優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯