`
Jclick
  • 浏览: 189107 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android集合SSH搭建服务器客户端请求

阅读更多
    小弟以前是学的J2EE,由于项目需要要开发android,所以临时补了一个多星期,主要是手机端和服务器端交互,双向开发的。
    首先在服务器端,我采用的是SSH框架,struts2集合了json插件,服务器和客户端的信息交互采用的JSON来传输,由于在服务器端用了Struts2,所以我就用装了一个JSON插件,这样,很轻易的就把服务器端的信息用JSON的形式发送到了手机端~~以下是代码,欢迎拍砖~~

首先,在服务器端搭建好SSH框架,具体细节就不在陈述~struts xml配置如下:
	<package name="login" extends="json-default">
	    <action name="login" class="com.jclick.test.LoginAction" method="login">
	       <result type="json"><paramname="includeProperties">result</param></result>
	    </action>
	</package>


手机端的代码如下:

首先,手机端有一个缓存类,主要用于缓存一些手机端需要访问的数据,这样的好处是可以达达节省手机和服务器的交互,用单例实现的:
package com.jclick.cache;

import com.jclick.bean.User;

public class Cache {
	
	private User User;
	
	private Cache(){
		
	}
	/** 构造单例 */
	private static class CacheHolder{
		private static final Cache INSTANCE = new Cache();
	}
	public Cache getInstance(){
		return CacheHolder.INSTANCE;
	}
	public User getUser() {
		return User;
	}
	public void setUser(User User) {
		this.User = User;
	}

}


接着开始书写手机端的协议,用户向服务器发送请求,同时服务器反馈给手机端信息的:
package com.jclick.protocol;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;

public class BaseProtocol {
	private StringBuilder sb = new StringBuilder();

	private HttpClient httpClient;
	private HttpPost httpRequest;
	private HttpResponse response;

	private List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();

	BaseProtocol() {
		httpClient = new DefaultHttpClient();
	}

	/**
	 * 向服务器端发送请求
	 * 
	 * @param url
	 * @throws Exception
	 */
	protected void pack(String url) throws Exception {
		httpClient = new DefaultHttpClient();
		httpRequest = new HttpPost(url);

		httpRequest.setEntity(new UrlEncodedFormEntity(nameValuePair));
		response = httpClient.execute(httpRequest);
	}

	/**
	 * 得到返回数据
	 * 
	 * @param url
	 * @return
	 * @throws Exception
	 */
	protected void parse() throws Exception {
		// TODO 状态处理 500 200
		if (response.getStatusLine().getStatusCode() == 200) {

			BufferedReader bufferedReader2 = new BufferedReader(
					new InputStreamReader(response.getEntity().getContent()));
			for (String s = bufferedReader2.readLine(); s != null; s = bufferedReader2
					.readLine()) {
				sb.append(s);
			}
		}
	}

	/**
	 * 向服务器发送信息
	 * 
	 * @param key
	 * @param value
	 */
	public void addNameValuePair(String key, String value) {
		nameValuePair.add(new BasicNameValuePair(key, value));
	}

	/**
	 * 返回JSONObject对象数据模型
	 * 
	 * @return
	 * @throws JSONException
	 */
	public JSONObject getJSON() throws JSONException {
		return new JSONObject(sb.toString());
	}

}



接着是登陆协议,在这里我只是模拟登陆使用的一个类,仅供大家参考:
package com.jclick.protocol;

import org.json.JSONObject;

import com.jclick.bean.User;

public class LoginProtocol extends BaseProtocol{
	
	private final static String URL = "http://localhost:8080/test/login";
	
	public boolean checkLogin(User usr){
		try {
			pack(URL);
			parse();
			JSONObject obj = this.getJSON();
			if(obj.getString("result").equals("failed")){
				return false;
			}else{
				return true;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}

}



然后是User实体类,主要用于保存用户信息:
package com.jclick.bean;

public class User {
	private String username;
	private String password;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}

}



最后就是LoginActivity里边判断登陆的代码了,详细代码不再贴出来了,仅贴一个判断登陆的代码:
		private void checkedData(){
			username = ((EditText)findViewById(R.id.username)).getText().toString();
			password = ((EditText)findViewById(R.id.password)).getText().toString();
			 
			User user = new User();
			user.setUsername(username);
			user.setPassword(password);
			LoginProtocol login = new LoginProtocol();
			boolean result = login.checkLogin(user);
			
			if(result){ 				SpiderCache.getInstance().setUserSession(user);
				Toast.makeText(getApplicationContext(), "登录成功", 1000).show();
				Intent intent = new Intent ();
				intent.setClass(LoginActivity.this,WelcomeActivity.class);
				startActivity(intent);
			}else{ 				Toast.makeText(LoginActivity.this,"密码或用户名不匹配,请重新输入!",1000).show();
			}
		}





以上代码为了跟大家分享一下,感觉手机端和服务器双向开发非常爽~~同时对android的兴趣大大提升,它也没有我想象中的那么难~~~
分享到:
评论
19 楼 u011363533 2014-11-13  
楼主能否分源码给我参考一下,最近正在学习这个,邮箱地址:13570580473@163.com
18 楼 朋在无锡 2013-07-29  
发现问题二:
我使用时,如果不设置utf-8,则无法连接到服务器,
正确代码如下:
httpRequest.setEntity(new UrlEncodedFormEntity(nameValuePair,HTTP.UTF_8));
同时如果需要传参数,需要在pack(url)添加参数,
addNameValuePair("name", user.getName());
addNameValuePair("password", user.getPassword());
pack(URL);
parse();
17 楼 朋在无锡 2013-07-29  
我在使用这个代码时,发现如下几个问题:
checkLogin(User usr)里面的usr根本没用,怎么检查登陆的?
16 楼 seya 2012-05-29  
Jclick 写道
seya 写道
发送的JSON可以压缩一下, 可以有效减少网络数据传输量。

谢谢建议!能告诉我怎么进行压缩么?我只是在服务器端对json传输的数据进行了过滤,去掉不必要的信息。
不知道你说的压缩是怎么?

用java中的Zip库方法压缩下, 变成短的字符串。
15 楼 xiong_liang 2012-05-17  
给否给发一份资料  网上的这样的资料太少了
非常感谢
14 楼 lwjshuai 2011-12-25  
可以发一份源码给我学习下吗?最近公司在做这方面的应用,我对android还不是很熟悉,请求帮助一下,感谢。174416544@qq.com
13 楼 Jclick 2011-04-05  
shengdong 写道
使用json作处理的时候发现一个问题,估计你也会遇上。提示一下,如果使用gson或者其他作json->object转换的时候,需要考虑内存的问题,我的尝试是超过1200个对象的数据作类型转换<List<Object>>会造成ooutofmemory,目前只能分步处理

如果一次性去很大量的数据的话,本来就设计有缺陷。。
12 楼 shengdong 2011-04-05  
使用json作处理的时候发现一个问题,估计你也会遇上。提示一下,如果使用gson或者其他作json->object转换的时候,需要考虑内存的问题,我的尝试是超过1200个对象的数据作类型转换<List<Object>>会造成ooutofmemory,目前只能分步处理
11 楼 setnewgod 2011-04-02  
赞一个, 前几天还在想这块呢
10 楼 Lemuel 2011-04-02  
不错   正在学习android 可以借鉴一下
9 楼 Jclick 2011-03-30  
zbasd 写道
Swing不用配置XML这个的XML整的我受不了

你也可以不用XML~~~不过确实,我用XML感觉也很不爽~~~!
8 楼 zbasd 2011-03-30  
Swing不用配置XML这个的XML整的我受不了
7 楼 wdq 2011-03-30  
写的很好,小弟最近做的一个Android的和楼主所使用的情况类同,服务器端也是ssh做的,数据的交互也是json 不懂之处还需多多指教
6 楼 bsq519 2011-03-29  
写的很好。在我看来。正在学习android。
5 楼 zah5897 2011-03-29  
Jclick 写道
seya 写道
发送的JSON可以压缩一下, 可以有效减少网络数据传输量。

谢谢建议!能告诉我怎么进行压缩么?我只是在服务器端对json传输的数据进行了过滤,去掉不必要的信息。
不知道你说的压缩是怎么?

能说说具体是怎么压缩的吗
4 楼 Jclick 2011-03-29  
seya 写道
发送的JSON可以压缩一下, 可以有效减少网络数据传输量。

谢谢建议!能告诉我怎么进行压缩么?我只是在服务器端对json传输的数据进行了过滤,去掉不必要的信息。
不知道你说的压缩是怎么?
3 楼 seya 2011-03-29  
发送的JSON可以压缩一下, 可以有效减少网络数据传输量。
2 楼 Jclick 2011-03-29  
jantochen 写道
我也想好好学一下android

想学就抓紧时间~~其实只要基础好,应该不难学的,我以前学过一段时间的swing,感觉这上边的原理很多相差不大。。
1 楼 jantochen 2011-03-28  
我也想好好学一下android

相关推荐

    android 集合SSH客户端实现登录,并保持session访问服务端数据

    在Android开发中,有时我们需要与远程服务器进行交互,执行命令或者传输数据,这时SSH(Secure Shell)客户端就显得尤为重要。SSH提供了一种安全的网络协议,用于在不安全的网络环境中进行加密通信。本篇文章将深入...

    ssh服务器和客户端putty

    SSH服务器是提供SSH服务的软件,而SSH客户端则是连接到服务器进行交互的程序。Putty是一个流行的SSH客户端,尤其在Windows用户中非常受欢迎。 SSH的核心功能是加密所有在网络上传输的数据,包括用户名、密码、命令...

    android 实现 ssh功能

    要使Android设备作为SSH服务器,需要设置一个后台服务来监听并接受连接请求。这通常涉及到创建一个SSH服务器实例,配置端口、用户权限等,并保持服务常驻内存。 5. **客户端功能**: 对于SSH客户端功能,Android...

    putty_ssh等远程客户端

    【标题】"Putty SSH等远程客户端"涵盖了多种网络连接协议的使用,主要焦点在于SSH(Secure Shell)协议。Putty是一款广泛应用于Windows系统的开源、免费的终端模拟器,它支持用户通过安全的方式访问远程服务器,进行...

    基于SSH的Android客户端与服务器端的数据交互.pdf

    在基于SSH的Android数据交互中,服务器端通常会使用Struts2接收来自Android客户端的请求,通过Action类处理业务逻辑,然后调用Hibernate进行数据库操作。Spring则在整个过程中扮演着协调者的角色,管理各个组件的...

    puppet-ssh, 管理ssh服务器和客户端的Puppet 模块.zip

    puppet-ssh, 管理ssh服务器和客户端的Puppet 模块 Puppet 通过 Puppet 管理SSH客户端和服务器。 源:https://github.com/saz/puppet-ssh要求主机密钥管理的导出资源puppetlabs/stdlibpupp

    SSH为android客户端返回json数据,demo2

    标题中的"SSH为android客户端返回json数据,demo2"指的是在Android应用开发中,通过SSH(Secure Shell)协议从远程服务器获取JSON格式的数据,并展示在客户端。SSH是一种网络协议,常用于安全地远程登录和传输文件,...

    SSH为android客户端返回json数据,demo1

    标题中的"SSH为android客户端返回json数据,demo1"表明我们将探讨如何在Android客户端通过SSH(Secure Shell)协议获取服务器返回的JSON数据。SSH是一种网络协议,常用于安全地远程登录到服务器,执行命令和传输数据...

    swift-一个用于iOS和macOS的SSH和SFTP客户端

    Pisth作为一个SSH和SFTP客户端,为用户提供了便捷的工具来连接到远程服务器,进行安全的文件操作,如浏览目录、上传下载文件、执行shell命令等。 在Swift中开发这样的应用,开发者可以利用Swift的现代语法和强大的...

    Android与SSH框架服务器通信方式

    Android与SSH框架服务器通信方式!一篇技术文档!

    详解Android客户端与服务器交互方式

    最近的Android项目开发过程中一个问题困扰自己很长时间,Android客户端与服务器交互有几种方式,最常见的就是webservices和json。要在Android手机客户端与pc服务器交互,需要满足下面几种条件:跨平台、传输数据格式...

    ssh连接linux客户端

    ssh连接linux客户端,可以帮助更好的从windows连接linux

    SSH Secure Linux 客户端

    在Linux环境中,SSH客户端通常用于连接到远程服务器进行管理、传输文件等操作。"SSH Secure Linux 客户端"是一款专为Windows用户设计的工具,它整合了控制台和文件传输功能,为Linux程序员提供了方便的一站式解决...

    一个用于Node.js的SSH2SFTP客户端

    而SSH2SFTP客户端是专门针对Node.js设计的一个库,用于实现Secure File Transfer Protocol (SFTP)的功能,它是Secure Shell (SSH) 协议的一部分,常用于安全地在远程主机之间传输文件。本文将深入探讨Node.js中的SSH...

    SSH远程连接客户端编码设置

    这里的`SendEnv`指令告诉SSH客户端发送`LANG`和所有`LC_*`环境变量到服务器,确保客户端和服务器端的字符集保持一致。 3. **测试连接** 完成以上设置后,尝试重新建立SSH连接,检查中文字符是否能够正常显示。 ...

    ssh连linux客户端

    本篇文章将深入探讨SSH连接Linux客户端的相关知识点。 首先,理解SSH的基本原理至关重要。SSH通过使用公钥/私钥对进行身份验证,确保只有授权用户能够访问服务器。当用户尝试连接时,服务器会验证客户端提供的公钥...

    同一台电脑上搭建GIT服务器和客户端

    搭建 GIT 服务器和客户端 在上述文件中,我们可以提取出以下知识点: 一、关于 Git 服务器的搭建 在搭建 Git 服务器时,我们需要安装 Git 软件,并创建一个专门用于运行 Git 服务的用户。在此过程中,我们需要...

    Android搭建客户端,实现手机和服务器的交互

    要实现Android客户端与服务器的SSH连接,你需要集成SSH库,如JSch。JSch是一个纯Java实现的SSH2库,允许开发者连接到SSH服务器,执行命令,传输文件等。在项目中导入JSch库后,可以通过创建Session,设置身份验证...

    利Android AQuery中ajax访问SSH搭建的后台Java Web服务器

    本文将深入探讨如何利用Android的AQuery库结合Ajax技术来访问由SSH搭建的后台Java Web服务器,从而实现数据的动态获取和提交。 首先,我们需要了解AQuery。AQuery是Android平台上的一个强大的图片加载和网络请求库...

Global site tag (gtag.js) - Google Analytics