Я хочу подключиться к серверу удаленно, что я сделал через J sch programe, , и теперь я хочу запускать два потока одновременно на этом удаленном сервере.Два потока, выполняющихся одновременно на удаленном сервере
Один поток будет контролировать ЦП Сведения о удаленном сервере, Вторая тема будет инициировать приложение на том же удаленном сервере.
Вот мой фрагмент кода для основного класса: OpenSessionForRemoteConnection()
- это подкласс, использующий jsch для подключения к удаленному серверу. GetCpuDetails
и InitiateApllications
являются подклассами для потоков. Моя проблема заключается в том, что я создаю GetCpuDetails
как обычный подкласс, а затем получаю CpuDetails
без каких-либо проблем. Но когда я использую потоки, я не получаю никакого потока ввода. Я не могу определить, где я ошибся!
Я не специалист по ИТ; Кто-нибудь может помочь? или предложить мне другой вариант сделать то же самое?
ГЛАВНЫЙ КЛАСС ----
public static void main(String[] args) {
String host="192.168.101.191";
Session session = null;
OpenSessionForRemoteConnection server1 = new OpenSessionForRemoteConnection();
try{
System.out.println("calling the method for opening a new session");
session= server1.openSession(host);
GetCpuDetails Cpu=new GetCpuDetails (session);
InitiateApllications initiate=new InitiateApllications(session);
Thread t1 = new Thread(Cpu);
Thread t2 = new Thread(initiate);
t1.start();
t2.start();
server1.closeSession();
} catch(Exception e){
System.out.println(e);
}
System.out.println("SESSION CLOSED--->");
}
Суб класс, чтобы открыть сессию для удаленного хоста:
String user="user";
String password="password";
String port="22";
Session session;
/**
* @param args
*/
/*
* This method is for opening a session and establishing remote connection to the host
*/
public Session openSession (String host){
try{
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
session=jsch.getSession(user, host, 22);
session.setPassword(password);
session.setConfig(config);
session.connect(); // New Session for Host established and connected
}catch(Exception e){
System.out.println(e);
}
return session;
}
/*
* This method id for closing the session and disconnecting the remote server.
*/
public void closeSession(){
session.disconnect();
}
Этот подклассов реализует работоспособным; чтобы получить детали CPU
GetCpuDetails Открытый класс реализует Runnable {
/**
* @param args
*/
private Session session;
public GetCpuDetails (Session MainSession){
//this.command=s;
this.session=MainSession;
}
@Override
public void run() {
processCommand(session);
}
private void processCommand(Session session) {
try{
System.out.println("get host");
if(session.isConnected()){
System.out.println("SESSION STILL CONNECTED------------->");
}
try{
Channel channelForCPUDetails=channelForCPUDetails=session.openChannel("exec");
((ChannelExec)channelForCPUDetails).setCommand("iostat");
channelForCPUDetails.setInputStream(null);
((ChannelExec)channelForCPUDetails).setErrStream(System.err);
InputStream in=channelForCPUDetails.getInputStream();
channelForCPUDetails.connect();
byte[] tmp=new byte[1024];
while(true){
while(in.available()>0){
System.out.printf("INSIDE WHILE->"+channelForCPUDetails.getInputStream());
int i=in.read(tmp, 0, 1024);
if(i<0)break;
System.out.print(new String(tmp, 0, i));
}
if(channelForCPUDetails.isClosed()){
System.out.println("exit-status: "+channelForCPUDetails.getExitStatus());
break;
}
}
channelForCPUDetails.disconnect();
}catch(Exception e){
System.out.println(e);
}
}
private void suspendThread(){
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Спасибо ... Это сработало! :) –