我正在实现一个调用服务器上运行的休息服务的android应用程序。为了访问服务器,我必须转发端口(这是我大学的限制)。我已经使用cz.msebera.android。*库实现了所有http请求,并且对于转发我使用单独的应用程序JuiceSSH。这工作正常。现在我问自己是否可以通过编程方式将端口与已使用的库结合使用。任何人都有想法?我尝试过jsch但是我无法将它与库结合起来。
这是我的示例代码:
private class LoginTask extends AsyncTask<String, Void, JSONObject> {
@Override
protected JSONObject doInBackground(String... params) {
Session session = SSHSession.createSession();
JSONObject result = null;
StringBuilder stringBuilder = new StringBuilder();
HttpClient client = HttpClientBuilder.create().build();
HttpPost loginRequest = new HttpPost(params[0]);
JSONObject userInfo = createUserInfo(params[1], params[2]);
if (userInfo != null) {
StringEntity stringEntity = new StringEntity(userInfo.toString(), "UTF-8");
stringEntity.setContentType("application/json");
if (stringEntity != null) {
loginRequest.setEntity(stringEntity);
loginRequest.setHeader("Content-Type", "application/json");
loginRequest.setHeader("Accept-Encoding", "application/json");
try {
session.connect();
session.setPortForwardingL(5500, "localhost", 8080);
HttpResponse response = client.execute(loginRequest);
InputStream input = response.getEntity().getContent();
String tempJson;
if (input != null) {
BufferedReader reader
= new BufferedReader(new InputStreamReader(input, "UTF-8"));
while ((tempJson = reader.readLine()) != null) {
stringBuilder.append(tempJson);
}
result = new JSONObject(stringBuilder.toString());
return result;
}
} catch (IOException | JSONException | JSchException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
e.printStackTrace();
AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this)
.setTitle(R.string.error_login_title)
.setMessage("Sie können derzeit nicht auf den Port im Netz"
+ "der Universität Passau zugreifen!\n" +
"Bitte versuchen Sie es erneut im entsprechenden "
+ "Netz mit entsprechender Port-Weiterleitung!")
.setNegativeButton("OK", null)
.create();
alertDialog.show();
}
});
}
}
}
return result;
}
主机,端口,用户名和密码都没问题,因为我在JuiceSSH中使用相同的端口转发功能。 运行代码我得到连接超时,我的AlertDialog告诉我,应用程序无法连接到服务器。