gpt4 book ai didi

java - 如何使用我的 Java/Android 应用程序进行 SSH?

转载 作者:行者123 更新时间:2023-11-30 11:25:21 26 4
gpt4 key购买 nike

我正在尝试使用 Ganymed 库建立 SSH 连接。但是,在使用该库时,似乎在为我要连接的主机创建了一个 Connection 对象之后,它并没有最终连接到它,而是直接进入了我代码的 catch block 。此应用程序将连接到我的 Raspberry Pi 以执行一些命令。

谁能向我解释为什么会发生这种情况?我在网上和这个网站上到处都看过,但我似乎找不到任何解决方案。我是否需要一些额外的文件以供 SSH 引用?如果我能在这方面得到一些帮助,我将不胜感激。以下是尝试建立 SSH 连接的类的代码。

package com.sys.videostreamer; 
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;

public class Options extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_options);
Button startssh = (Button) findViewById(R.id.camera_start);
System.out.println("pass");
startssh.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String hostname = "10.X.X.XX";
String username = "username";
String password = "password";

try {
// create a connection instance and connect to it
Connection ssh = new Connection(hostname);

ssh.connect();
boolean authorized = ssh.authenticateWithPassword(username,
password);
if (authorized == false)
throw new IOException(
"Could not authenticate connection, please try again.");

// if authorized, create the session
Session session = ssh.openSession();
session.execCommand("mkdir test");

// terminate the session
session.close();

// terminate the connection
ssh.close();
} catch (IOException e) {
e.printStackTrace(System.err);
System.out.println(e.getMessage());
//System.exit(2);
}
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.options, menu);
return true;
}

}

最佳答案

它可能无法正常工作,因为您在主线程上执行网络任务。在 Android 中,所有网络请求都必须像这样在后台线程中完成:

final Thread thread = new Thread(new Runnable() {

@Override
public void run() {
try {
// create a connection instance and connect to it
Connection ssh = new Connection(hostname);

ssh.connect();
final boolean authorized = ssh.authenticateWithPassword(username,
password);
runOnUiThread(new Runnable() {
@Override
public void run() {
if (!authorized)
Toast.makeText(MainActivity.this, "could not establish connection", Toast.LENGTH_SHORT).show();
else {
Toast.makeText(MainActivity.this, "wohoo", Toast.LENGTH_SHORT).show();
}
}
});


// if authorized, create the session
Session session = ssh.openSession();

// terminate the session
session.close();

// terminate the connection
ssh.close();
} catch (IOException e) {
e.printStackTrace(System.err);
System.out.println(e.getMessage());
//System.exit(2);
}
}
});

当然你必须在 list 中添加互联网权限

<uses-permission android:name="android.permission.INTERNET" />

关于java - 如何使用我的 Java/Android 应用程序进行 SSH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com