Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向Raspberry Pi发送带有JSCH的SSH命令_Java_Android_Eclipse_Ssh_Jsch - Fatal编程技术网

Java 向Raspberry Pi发送带有JSCH的SSH命令

Java 向Raspberry Pi发送带有JSCH的SSH命令,java,android,eclipse,ssh,jsch,Java,Android,Eclipse,Ssh,Jsch,我想写一个应用程序,用我的智能手机向我的Raspberry Pi发送SSH命令。我读到JSCH是一个不错的选择,所以我在Eclipse中将JSCH库包含到我的项目中 我创建了一个名为SSH.java的新类,并将此代码放入: package com.app.bondrucker; import java.io.ByteArrayOutputStream; import java.util.Properties; import com.jcraft.jsch.ChannelExec; impor

我想写一个应用程序,用我的智能手机向我的Raspberry Pi发送SSH命令。我读到JSCH是一个不错的选择,所以我在Eclipse中将JSCH库包含到我的项目中

我创建了一个名为SSH.java的新类,并将此代码放入:

package com.app.bondrucker;

import java.io.ByteArrayOutputStream;
import java.util.Properties;

import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;


public class SSH {
    public static String executeRemoteCommand() throws Exception {
        JSch jsch = new JSch();
        Session session = jsch.getSession("pi", "192.168.2.10", 22);
        session.setPassword("raspberry");


        // Avoid asking for key confirmation
        Properties prop = new Properties();
        prop.put("StrictHostKeyChecking", "no");
        session.setConfig(prop);

        session.connect();

        // SSH Channel
        ChannelExec channelssh = (ChannelExec)
        session.openChannel("exec");
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        channelssh.setOutputStream(baos);

        // Execute command
        channelssh.setCommand("sudo shutdown -h now");
        channelssh.connect();
        channelssh.disconnect();

        return baos.toString();
    }
}
你能查一下我的密码吗

执行此行时,应用程序崩溃:

session.connect();
我用一个按钮启动JSCH代码,该按钮执行以下代码:

SSH.executeRemoteCommand();
以下是我按下按钮执行SSH命令时显示的LogCat消息:

08-04 22:00:38.668:D/libc29531:[NET]getaddrinfo+,hn 120x3139322e313638,序列号,族0,标志4 08-04 22:00:38.668:D/libc29531:[NET]getaddrinfo-,成功 08-04 22:00:38.668:W/dalvikvm29531:threadid=1:thread退出时未捕获异常组=0x41d4be18 08-04 22:00:38.678:E/ActivityManager 755:应用程序崩溃!流程:com.app.bondrucker 08-04 22:00:38.678:E/AndroidRuntime29531:致命异常:主 08-04 22:00:38.678:E/AndroidRuntime29531:Process:com.app.bondrucker,PID:29531 08-04 22:00:38.678:E/AndroidRuntime29531:java.lang.IllegalStateException:无法执行活动的方法 08-04 22:00:38.678:E/AndroidRuntime29531:at android.view.view$1.onClickView.java:3865 08-04 22:00:38.678:E/AndroidRuntime29531:at android.view.view.performClickView.java:4480 08-04 22:00:38.678:E/AndroidRuntime29531:at-android.view.view$PerformClick.runView.java:18686 08-04 22:00:38.678:E/AndroidRuntime29531:at-android.os.Handler.handleCallbackHandler.java:733 08-04 22:00:38.678:E/AndroidRuntime29531:at android.os.Handler.dispatchMessageHandler.java:95 08-04 22:00:38.678:E/AndroidRuntime29531:at android.os.Looper.Looper.java:157 08-04 22:00:38.678:E/AndroidRuntime29531:at-android.app.ActivityThread.mainActivityThread.java:5872 08-04 22:00:38.678:E/AndroidRuntime29531:at java.lang.reflect.Method.Invokenactive Method 08-04 22:00:38.678:E/AndroidRuntime29531:at java.lang.reflect.Method.invokeMethod.java:515 08-04 22:00:38.678:E/AndroidRuntime29531:com.android.internal.os.ZygoteInit$methodAndArgscaler.runZygoteInit.java:858 08-04 22:00:38.678:E/AndroidRuntime29531:com.android.internal.os.ZygoteInit.mainZygoteInit.java:674 08-04 22:00:38.678:E/AndroidRuntime29531:at dalvik.system.NativeStart.main本地方法 08-04 22:00:38.678:E/AndroidRuntime29531:由以下原因引起:java.lang.reflect.InvocationTargetException 08-04 22:00:38.678:E/AndroidRuntime29531:at java.lang.reflect.Method.Invokenactive Method 08-04 22:00:38.678:E/AndroidRuntime29531:at java.lang.reflect.Method.invokeMethod.java:515 08-04 22:00:38.678:E/AndroidRuntime29531:at-android.view.view$1.onClickView.java:3860 08-04 22:00:38.678:E/AndroidRuntime29531:。。。还有11个 08-04 22:00:38.678:E/AndroidRuntime29531:原因:com.jcraft.jsch.JSchException:java.net.SocketException:socket失败:EACCES权限被拒绝 08-04 22:00:38.678:E/AndroidRuntime29531:com.jcraft.jsch.Util.createSocketUtil.java:349 08-04 22:00:38.678:E/AndroidRuntime29531:com.jcraft.jsch.Session.connectSession.java:215 08-04 22:00:38.678:E/AndroidRuntime29531:com.jcraft.jsch.Session.connectSession.java:183 08-04 22:00:38.678:E/AndroidRuntime29531:com.app.bondrucker.SSH.executeRemoteCommandSSH.java:30 08-04 22:00:38.678:E/AndroidRuntime29531:com.app.bondrucker.MainActivity.selfDestructMainActivity.java:42 08-04 22:00:38.678:E/AndroidRuntime29531:。。。14多 08-04 22:00:38.678:E/AndroidRuntime29531:原因:java.net.SocketException:套接字失败:EACCES权限被拒绝 08-04 22:00:38.678:E/AndroidRuntime29531:at libcore.io.IoBridge.socketIoBridge.java:576 08-04 22:00:38.678:E/AndroidRuntime29531:at java.net.PlainSocketImpl.createPlainSocketImpl.java:201 08-04 22:00:38.678:E/AndroidRuntime29531:at java.net.Socket.startupSocketSocket.java:590 08-04 22:00:38.678:E/AndroidRuntime29531:at java.net.Socket.tryalLaddressSocket.java:128 08-04 22:00:38.678:E/AndroidRuntime29531:at java.net.Socket.Socket.java:178 08-04 22:00:38.678:E/AndroidRuntime29531:at java.net.Socket.Socket.java:150 08-04 22:00:38.678:E/AndroidRuntime29531:at com.jcraft.jsch.Util.createSocketUtil.java:343 08-04 22:00:38.678:E/AndroidRuntime29531:。。。还有18个 08-04 22:00:38.678:E/AndroidRuntime29531:原因:libcore.io.ErrnoException:套接字失败:EACCES权限被拒绝 08-04 22:00:38.678:E/AndroidRuntime29531:at libcore.io.Posix.socketNative方法 08-04 22:00:38.678:E/AndroidRuntime29531:at libcore.io.BlockGuardOs.socketBlockGuardOs.java:181 08-04 22:00:38.678:E/AndroidRuntime29531:at libcore.io.IoBridge.socketIoBridge.java:561 08-04 22:00:38.678:E/AndroidRuntime29531:。。。还有24个
08-04 22:00:38.678:W/ActivityManager 755:Force finishing activity com.app.bondrucker/.main activity

您有stacktrace吗?我制作了一个应用程序,它使用Jsch来ssh到raspber
我怎样才能得到stackstrace?在Eclipse中的Logcat中,我希望它会抛出NetworkOnMainThreadException。您应该研究如何通过使用AsyncTask来避免这种情况。我编辑了我的问题并将LogCat消息放入,因为我无法回答自己的问题。