首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android上使用Jsch (Exec)时特定unix命令的问题

在Android上使用Jsch (Exec)时特定unix命令的问题
EN

Stack Overflow用户
提问于 2013-12-05 05:53:29
回答 1查看 1.1K关注 0票数 0

您好,我做了几天的研究和一些问题分析,但我不知道如何解决我的问题现在。

也许有人能帮上忙。

我正在使用用于Android设备的Jsch来访问我的树莓派,以便设置一些特定的命令。

我从Jsch shell命令开始,除了由于无限循环而无法关闭连接之外,一切都运行得很好。

我尝试切换到Exec,特别是因为我只想发送几个命令,并不真正需要注意shell上发生了什么。

不管怎样..。这是我的代码:目的是向我的电视发送一个cec睡眠信号……

代码语言:javascript
复制
 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上的工作就像一个护身符。

我希望你能帮助我。

**Update,因为我第一次使用的管道|不足以执行,必须添加Outputstream以便在连接到通道后发送命令,我能够实现向我的电视发送命令...谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-10-05 20:04:51

我更新了上面的代码,并将/r /n添加到要刷新的字符串中。这实际上是一个未解决的问题。- DerKai

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20386825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档