你好我做了几天研究和一些问题分析,但我现在还不知道如何解决我的问题。
也许有人可以提供帮助....
我正在使用Jsch for Android设备访问我的raspberry pi以设置一些特定的命令。
我从Jsch shell命令开始,除了由于无限循环而无法关闭连接这一事实之外,一切正常。
我试图切换到Exec,特别是因为我只想发送一些命令,并且真的不需要知道shell上发生了什么。
无论如何......这是我的代码: 目的是向我的电视发送一个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。 这意味着找不到命令....所以我假设shell和exec命令之间有很大的区别... shell我的工作就像ssh上的一个魅力。
我希望你能帮助我。
:::更新,因为我第一次使用Pipes |这对于exec来说是不够的,并且必须添加Outputstream才能在连接到通道后发送命令我能够实现向我的电视发送命令...谢谢
答案 0 :(得分:0)
我更新了上面的代码并将/ r / n添加到了我要刷新的字符串中。这实际上是公开的问题。 - DerKai