Привет, я проводил пару дней, занимался исследованиями и анализом проблем, но я не знаю, как решить мою проблему прямо сейчас.
Может кому поможет ....
Я использую Jsch для устройств Android, чтобы получить доступ к моему Raspberry Pi, чтобы установить некоторые конкретные команды.
Я начал с команды оболочки Jsch, и все работало нормально, за исключением того факта, что я никогда не мог закрыть соединение из-за бесконечного цикла.
Я попытался переключиться на Exec, особенно потому, что я просто хочу отправить пару команд и мне не нужно разбираться в том, что происходит в оболочке.
В любом случае ... вот мой код: Намерение состоит в том, чтобы отправить сигнал сна cec на мой телевизор ...
public c_jsch(String userName, String password,
String connectionIP, String knownHostsFileName)
{
JSch jsch = new JSch();
System.out.println("com.jcraft.jsch BBÄÄÄHHMM");
try
{
Session session = jsch.getSession("pi", "192.168.188.23", 22);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword("raspberry");
session.connect();
String command = "/home/pi/.xbmc-current/xbmc-bin/bin/cec-client -s -d 1";
String command2 = "tx 10 36 \r \n";
ChannelExec channel = (ChannelExec) session.openChannel("exec");
channel.setCommand(command);
channel.setInputStream(null);
channel.connect();
InputStream in = channel.getInputStream();
//NOT YET USEFUL
OutputStream out = channel.getOutputStream();
System.out.println("com.jcraft.jsch Unix system connected...");
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("com.jcraft.jsch Feedback: " + new String(tmp, 0, i));
// NOT WORKING
out.write(command2.getBytes());
out.flush();
System.out.println("com.jcraft.jsch Command flushed");
}
if (channel.isClosed())
{
System.out.println("com.jcraft.jsch exit-status: " + channel.getExitStatus());
break;
}
try
{
Thread.sleep(1000);
}
catch (Exception ee)
{
}
}
channel.disconnect();
session.disconnect();
System.out.println("com.jcraft.jsch exit-status: DONE");
}
catch (Exception e)
{
System.out.println("com.jcraft.jsch exit-status: " + e.getMessage());
}
}
Попытка использовать этот код не вызывает сообщений об ошибках, но вызывает разочаровывающее сообщение о статусе выхода: 127. Это означает, что команда не найдена .... поэтому я предполагаю, что существует большая разница между командами оболочки и exec ... с оболочкой я работаю как шарм на ssh.
Я надеюсь, что вы можете мне помочь.
::: Обновление, так как я впервые работал с Pipes | которых недостаточно для exec, и мне пришлось добавить выходной поток, чтобы отправлять команды после подключения к каналу, я смог реализовать отправку команд на свой телевизор ... спасибо
shell
для интерпретации символа вертикальной черты, в то время как команда exec обычно вызывает процесс напрямую без оболочки в качестве посредника. Возможно, вы сможете найти способ вызвать cec-client и отправить данные в его стандартный ввод. Или, возможно, вы можете создать настраиваемый cec-клиент, который делает это без ввода или принимает строку в качестве аргумента командной строки. - person Chris Stratton   schedule 05.12.2013