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

为了与服务器通讯其实无非就两种协议HTTP和TCP,TCP的学习Socket,HTTP的话熟悉一下HTTP协议和相关Java API。而下面的几种方式就是从这两种协议扩展出来的:webservices soap、SSH的JSON(可参考:该链接)、xmlrpc(wordpress for android)......

Socket 不推荐 ,HTTP RESTful 推荐。跟服务器传数据的话,一般都是采用 RESTful API 来传输。这样首先要对 HTTP 协议有初步的理解,至少知道 GET / POST 分别是干嘛的有什么区别。

      如果没有特殊要求,使用webservices传输XML文件比较简单及通用,如果对数据大小及传输速度有要求的话就用json更合适。

【Socket与HTTP连接的区别】

HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。

socket是可以监听,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。保持客户端与服务器数据的实时与同步。

xml rpc是使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据。

RPC是Remote Procedure Call的缩写,翻译成中文就是远程过程调用,是一种在本地的机器上调用远端机器上的一个过程(方法)的技术,这个过程也被大家称为“分布式计算”

网上有很多例子来演示Android客户端和服务器端数据如何实现交互。不过这些例子大多比较繁杂,对于初学者来说这是不利的,现在介绍一种代码简单、逻辑清晰的交互例子:

使用webservices传输XML文件:

一、服务器端:

代码1:添加名为“AndroidServerServlet.java”的文件

 1 package com.ghj.packageofservlet;
 2
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10
11 public class AndroidServerServlet extends HttpServlet {
12
13     private static final long serialVersionUID = 6792396567928634227L;
14
15     public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
16         response.setContentType(text/plain; charset=UTF-8);
17         request.setCharacterEncoding(UTF-8);
18         System.err.println(request.getParameter(clientData));
19         PrintWriter printWriter = response.getWriter();
20         printWriter.print(您好Android客户端!);
21         printWriter.flush();
22         printWriter.close();
23     }
24 }

代码2:修改名为“web.xml”的文件

 1 <!--?xml version=1.0 encoding=UTF-8?-->
 2 <web-app http:="java.sun.com=" javaee="ns=" version="2.5" web-app_2_5.xsd="xml=" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee"><servlet>
 3         <servlet-name>AndroidServerServlet</servlet-name>
 4         <servlet-class>com.ghj.packageofservlet.AndroidServerServlet</servlet-class>
 5     </servlet>
 6
 7     <servlet-mapping>
 8         <servlet-name>AndroidServerServlet</servlet-name>
 9         <url-pattern>/AndroidServerServlet</url-pattern>
10     </servlet-mapping>
11 </web-app>

二、Android手机客户端:

代码1:添加名为“AndroidClientActivity.java”的文件

 1 package com.example.androidclient;
 2
 3 import java.io.IOException;
 4 import java.io.UnsupportedEncodingException;
 5 import java.util.ArrayList;
 6 import java.util.List;
 7
 8 import org.apache.http.HttpResponse;
 9 import org.apache.http.NameValuePair;
10 import org.apache.http.client.ClientProtocolException;
11 import org.apache.http.client.HttpClient;
12 import org.apache.http.client.entity.UrlEncodedFormEntity;
13 import org.apache.http.client.methods.HttpPost;
14 import org.apache.http.impl.client.DefaultHttpClient;
15 import org.apache.http.message.BasicNameValuePair;
16 import org.apache.http.protocol.HTTP;
17 import org.apache.http.util.EntityUtils;
18
19 import android.app.Activity;
20 import android.os.Bundle;
21 import android.os.Handler;
22 import android.os.Message;
23 import android.view.View;
24 import android.view.View.OnClickListener;
25 import android.widget.Button;
26 import android.widget.Toast;
27
28 public class AndroidClientActivity extends Activity {
29
30     @Override
31     protected void onCreate(Bundle savedInstanceState) {
32         super.onCreate(savedInstanceState);
33         setContentView(R.layout.android_client);
34
35         Button sendButton = (Button) findViewById(R.id.send_button);
36         sendButton.setOnClickListener(new OnClickListener(){
37             @Override
38             public void onClick(View v) {
39                 new Thread(new Runnable(){
40                     @Override
41                     public void run() {
42                         HttpPost httpRequest = new HttpPost(http://172.16.99.207:8080/AndroidServer/AndroidServerServlet);
43                         List<namevaluepair> params = new ArrayList<namevaluepair>();
44                         params.add(new BasicNameValuePair(clientData, 您好服务器端!));
45                         try {
46                             Message message = new Message();
47                             Bundle bundle = new Bundle();
48                             httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));//设置请求参数项
49                             HttpClient httpClient = new DefaultHttpClient();
50                             HttpResponse httpResponse = httpClient.execute(httpRequest);//执行请求返回响应
51                             if(httpResponse.getStatusLine().getStatusCode() == 200){//判断是否请求成功
52                                 bundle.putString(msg, EntityUtils.toString(httpResponse.getEntity()));
53                             }else{
54                                 bundle.putString(msg, 没有获取到Android服务器端的响应!);
55                             }
56                             message.setData(bundle);
57                             handler.sendMessage(message);
58                         } catch (ClientProtocolException e) {
59                             e.printStackTrace();
60                         } catch (UnsupportedEncodingException e) {
61                             e.printStackTrace();
62                         } catch (IOException e) {
63                             e.printStackTrace();
64                         }
65                     }
66                 }).start();
67             }
68         });
69     }
70
71     private Handler handler = new Handler(){
72         @Override
73         public void handleMessage(Message message) {
74             super.handleMessage(message);
75             Bundle bundle = message.getData();
76             String msg = bundle.getString(msg);
77             Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
78         }
79     };
80 }</namevaluepair></namevaluepair>

参考出处:1.http://blog.csdn.net/panfb227

2.http://www.2cto.com/kf/201501/370468.html

转载于:https://www.cnblogs.com/X-knight/p/5406362.html

Android客户端与服务器交互方式-小结相关推荐

  1. Android 客户端与服务器交互方式

    突然想到一个问题就是Android客户端与服务器交互有几种方式,因为在脑袋里想当然的就是webservices和json.要在Android手机客户端与pc服务器交互,需要满足下面几种条件:跨平台.传 ...

  2. Android 架构之路 (1)-- Android 客户端与服务器的数据交互总结

    前言: 本文总结了 Android 客户端与服务器进行交互时,采用RESTful API +Json的交互方式,针对不同的数据形式以及不同的解析方法,如有不足之处,欢迎指正. 文章目录 1. Andr ...

  3. android 访问服务器josn文件,Android客户端对服务器回来的json文件进行解析

    Android客户端对服务器返回的json文件进行解析 和解析XML的方式大同小异,只有解析方式存在区别: /** * 解析服务器返回来的json数据 * @param content * @retu ...

  4. Android客户端与服务器连接

    一.实验名称 Android客户端与服务器连接. 二.实验背景 2.1需求分析 1.服务端使用JSON解析客户端的请求数据 2.客户端通过HttpClient对象访问服务器,向服务器发送http请求. ...

  5. Android客户端与服务器用Socket进行通信

    Android客户端与服务器用Socket进行通信(简单,基础) #####哈哈哈,很久没有好好学习了,今天写一个关于通信的,我也是刚刚学到,代码还不完善,,,,有问题请大家指出 #Android客户 ...

  6. Socket 通信原理(Android客户端和服务器以TCPUDP方式互通)

     ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当,还望指教. 一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是So ...

  7. Android客户端与服务器之间的通信

    本文将介绍Android客户端与服务器端的通信的简单实现方法. 要两点需要注意的地方: 1.Android 端记得在AndroidManifest.xml里记得获取一下网络权限,否则无法进行网络通信, ...

  8. Socket实现Android客户端与服务器的通信

    前言:题目要求故写一下总结. 1.什么是Socket? 网络用语叫套接字原理是基于tcp/ip 协议的一种通信手段,目前题目中要求无非就是当客户端数据异常时推送给服务器报警信息 往常接下来都是先看效果 ...

  9. Android笔记 Android客户端从服务器获取源码乱码demo

    1构建web工程 新建web dynamic项目在login.jsp body体随便写一些中文 <%@ page language="java" contentType=&q ...

最新文章

  1. Linux下多路复用IO接口epoll/select/poll的区别
  2. JavaWeb学习总结(十七)——JSP中的九个内置对象
  3. 解题报告 poj 3207
  4. JS实现省市联动效果
  5. java soap 头_如何在Java中添加Soap标头
  6. fb静态区域_fb 静态数据
  7. async 和 await 之异步编程的学习
  8. 今年考了N3也不知道能不能过
  9. ACOUG 联合创始人盖国强:万象更新,数据库技术和生态的发展演进
  10. 《Head First 设计模式》阅读笔记(一)——策略模式
  11. jar命令指定入口类
  12. 共享内存及其用mmap实现共享内存
  13. Linux下配置完整安全的DHCP服务器详解
  14. 关于wordpress主题只显示一个的解决办法
  15. 日文简历 模板
  16. Windows 2000虚拟机安装全过程(VMware)
  17. word怎么把页面顺序倒过来_word设置倒序打印的方法
  18. ros中odometry数据生成方式与分发去向
  19. 【网络安全】OSSIM平台网络日志关联分析实战
  20. 第二本书:疯狂人类进化史20190620

热门文章

  1. 模块降额设计_模块电源需要注意的四个点
  2. java本地可以发到linux不行,java 使用 ftp 在windows环境下可以正常下载文件,在linux环境下不行...
  3. 人类一败涂地做图教程_《人类一败涂地》形象绘画技巧图文指南
  4. 2017二级c语言成绩,2017全国计机等级考试二级C语言知识点超全整(打印版).docx
  5. php悬浮图片,在JS中如何实现图片居中悬浮效果
  6. 计算机管理与维护实践课程,天津2012年自考“计算机维护维修(实践)”课程考试大纲...
  7. python学习-集合(创建、add、remove、discard、与、或、去同、存异)
  8. Hadoop生态系统的详细介绍
  9. 软件测试有没有测试大纲文档,系统测试大纲(范例).docx
  10. 笨方法python3_“笨方法”学Python3,习题 34 。