मैं एसएसएच का उपयोग कर स्थिर मार्ग प्रबंधन के लिए जावा जीयूआई प्रोग्राम लिख रहा हूं। मेरे कोड इस प्रकार है:जेएसएच: सत्र को जीवंत और ऊपर रखने के लिए
import com.jcraft.jsch.*;
import java.io.*;
public class Konsep {
String status;
static String username;
static String hostname;
String inputcommand;
String output;
static Session session;
JSch jsch = new JSch();
public String status(String stringstatus) {
stringstatus = status;
return stringstatus;
}
public String InputCommand(String inputcommandstatus) {
inputcommandstatus = inputcommand;
return inputcommandstatus;
}
public void connect(String usernamelokal, String hostnamelokal,
String password, int port) {
// JSch jsch=new JSch();
try {
Session sessionlokal = jsch.getSession(usernamelokal,
hostnamelokal, port);
sessionlokal.setPassword(password);
UserInfo ui = new UserInfoku.Infoku();
sessionlokal.setUserInfo(ui);
sessionlokal.setTimeout(0);
sessionlokal.connect();
status = "tersambung \n";
username = usernamelokal;
hostname = hostnamelokal;
session = sessionlokal;
System.out.println(username + " " + hostname);
} catch (Exception e) {
System.out.println(e);
status = "Exception = \n " + e + "\n";
}
}
public void disconnect() {
// JSch jsch=new JSch();
try {
Session sessionlokal = jsch.getSession(username, hostname);
// System.out.println(username +" "+ hostname);
sessionlokal.disconnect();
status = "wes pedhoott \n";
} catch (Exception e) {
System.out.println(e);
status = "Exception = \n " + e + "\n";
}
}
public void addRoute() {
// JSch jsch=new JSch();
System.out.println(username + " " + hostname);
try {
Session sessionlokal = session; // =jsch.getSession(username, hostname);
Channel channel = sessionlokal.openChannel("exec");
((ChannelExec) channel).setCommand(inputcommand);
channel.setInputStream(null);
channel.connect();
((ChannelExec) channel).setErrStream(System.err);
InputStream in = channel.getInputStream();
channel.connect();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0)
break;
System.out.print(new String(tmp, 0, i));
}
if (channel.isClosed()) {
System.out.println("exit-status: "
+ channel.getExitStatus());
break;
}
try {
Thread.sleep(1000);
} catch (Exception ee) {
}
}
channel.disconnect();
} catch (Exception e) {
System.out.println(e);
}
}
}
समस्या है जब मैं कनेक्ट विधि कॉल और फिर addroute बुला, कार्यक्रम रिटर्न
root 192.168.50.2
root 192.168.50.2
com.jcraft.jsch.JSchException: session is down
मैं के साथ सत्र का दर्जा प्राप्त करने की कोशिश कर रहा है या तो
Session sessionlokal=session; //returns com.jcraft.jsch.JSchException: ChannelExec
या
Session sessionlokal=jsch.getSession(username, hostname); //returns session is down
मैंने रखरखाव का उपयोग करने की भी कोशिश की है, लेकिन यह काम नहीं कर रहा है।
मेरा इरादा सत्र को छोड़कर, लॉग इन करने के दौरान, कमांड या कमांड निष्पादित करने और बाद में अन्य कमांड निष्पादित करने के लिए सत्र बनाने के लिए सत्र बनाना और फिर सत्र को बंद करना आवश्यक नहीं है (लॉग आउट)। मैं इस मंच पर खोज कर रहा हूं और मुझे यह question मिला है लेकिन कोड पहले निष्पादित करने के लिए कमांड को परिभाषित करने के लिए एक विधि बना रहा है, और फिर सत्र बना रहा है, कमांड की विधि को कॉल करें और सत्र बंद करें।
जैसा ऊपर बताया गया है, इसके बारे में कोई विचार कैसे करें?
अच्छा समाधान, केवल एक संकेत: मैं 'testChannel.exit();' सफल जांच के बाद, 'अन्यथा आप प्रत्येक चेक – GWu
धन्यवाद के लिए अलग-अलग तरफ एक और sftp-server डिमन प्रक्रियाओं के साथ समाप्त होता हूं।जोड़ा गया 'testChannel.exit() '। – blafasel
एकाधिक चैनल खोलते समय मुझे डेडलॉक समस्याएं थीं। GetSession() 'सिंक्रनाइज़' को हल करना इसे हल किया गया है, लेकिन यह एक प्रदर्शन हिट का थोड़ा सा है। क्या आप जानते हैं कि किस भाग को सिंक्रनाइज़ करने की आवश्यकता हो सकती है? शायद टेस्ट चैनल कनेक्ट = डिस्कनेक्ट? –