.Net程序员玩转Android开发---(14)客户端与服务器进行通信
2014-12-22 17:47
465 查看
前几天看到有同学问, android客户端怎么和服务端进行数据通信,获取服务器端的数据,和服务器端进行交互,这一节我们来共同学习一下这方面的内容。首先要明白既然远程通信操作,就要有服务器端和客户端。服务器端创建服务,客户端调用服务。正如在.NET中,通常我们用WCF创建服务,客户端通过添加服务来调用.Android中,客户端通过向服务器端POST 数据,可以与服务器端进行交互。可以使用android中的HttpPost类来操作。下面我们具体演示下。这节我们服务器端采用WCF服务。1. 服务端首先我们创建WCF服务项目,我们创建resrful格式的WCF服务,这样方便接受客户端传来的数据,同时也方便调用。下面的代码中创建一个GetResponse接口,数据传输方式采用JSON格式进行传输,
[ServiceContract] public interface IService1 { [OperationContract] [WebInvoke(UriTemplate = "GetResponse", Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)] TopResponse GetResponse(Stream stream); // TODO: 在此添加您的服务操作 } public class TopResponse { public string ErrorCode { get; set; } public string ErrorMsg { get; set; } }
public class Service1 : IService1 { public TopResponse GetResponse(Stream stream) { TopResponse response = new TopResponse(); StreamReader sr = new StreamReader(stream); string s = sr.ReadToEnd(); sr.Dispose(); NameValueCollection nvc = HttpUtility.ParseQueryString(s); if (nvc["code"] == "10000") { response.ErrorCode = "10000"; response.ErrorMsg = "Success"; } else { response.ErrorCode = "10010"; response.ErrorMsg = "Failure"; } return response; } }web.config
<?xml version="1.0" encoding="utf-8"?><configuration><system.web><compilation debug="true" targetFramework="4.0" /></system.web><system.serviceModel><services><service name="WcfServiceDemo.Service1"><endpoint binding="webHttpBinding" contract="WcfServiceDemo.IService1" behaviorConfiguration="webHttp"/></service></services><bindings><webHttpBinding><binding sendTimeout="00:20:00" maxReceivedMessageSize="2147483647" ><security mode="None" /></binding></webHttpBinding></bindings><behaviors><endpointBehaviors><behavior name="webHttp"><webHttp/></behavior></endpointBehaviors><serviceBehaviors><behavior><serviceMetadata httpGetEnabled="true"/><serviceDebug includeExceptionDetailInFaults="true"/></behavior></serviceBehaviors></behaviors><serviceHostingEnvironment multipleSiteBindingsEnabled="true" /></system.serviceModel><system.webServer><modules runAllManagedModulesForAllRequests="true"/><!--若要在调试过程中浏览 Web 应用程序根目录,请将下面的值设置为 True。在部署之前将该值设置为 False 可避免泄露 Web 应用程序文件夹信息。--><directoryBrowse enabled="true"/></system.webServer></configuration>2.客户端客户端使用httppost向服务器端post 数据,有一点要注意的是,好像在android 3.0 以后,要单独起一个线程来与服务器进行通信。
package com.example.helloword;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;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.apache.http.protocol.HTTP;import org.apache.http.util.EntityUtils;import android.app.Activity;import android.os.Bundle;public class AbsLayout extends Activity {private Thread thread;protected void onCreate(Bundle savedInstanceState){// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.abslayout);thread=new Thread(new Runnable(){@Overridepublic void run(){try{String url = "http://192.168.1.103/Service1.svc/GetResponse";//创建连接HttpPost httpPost = new HttpPost(url);//封装参数List<NameValuePair> params = new ArrayList<NameValuePair>();params.add(new BasicNameValuePair("code", "10000"));HttpResponse httpResponse = null;try {httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));httpResponse = new DefaultHttpClient().execute(httpPost);if (httpResponse.getStatusLine().getStatusCode() == 200) {String result = EntityUtils.toString(httpResponse.getEntity()); //获取返回结果System.out.println(result);}} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}catch(Exception e){e.printStackTrace();}}});thread.start();}}
相关文章推荐
- Android开发之简单的聊天室(客户端与服务器进行通信)
- Android开发之简单的聊天室(客户端与服务器进行通信)
- Android_TCP/IP开发——聊天室模型(客户端与服务器进行通信)
- Android客户端与服务器进行通信
- 使用Socket进行一台服务器与多个Android客户端进行双向通信
- Android开发:客户端与服务器通过传递和接收json数据进行交互
- 使用Socket进行一台服务器与多个Android客户端进行双向通信
- 智能点餐系统开发纪实1-----java服务器搭建,android客户端实现通信
- LDAP 客户端通过 SSL 与 LDAP 服务器进行通信
- Android入门:通过JSON数据与服务器进行通信
- Android与PC客户端进行Socket通信的一些问题
- 技术文档:使用JavaFX Script 进行客户端-服务器通信(eNew 第二十八期/2007.09)
- 客户端和应用服务器之间利用HttpClient和Servlet交互JSON对象进行通信
- Android Socket (简单) 客户端 与服务器通信
- 【吐血写此博】Fedora14下eclipse进行android开发,ibus提示没有输入窗口的 解决办法
- Android客户端与PC服务器通过socket进行交互实例
- Android入门:通过XML数据与服务器进行通信
- 用Android搭建客户端 手机和服务器交互开发实例
- Struts2服务器和Android客户端利用JSON进行数据的传递
- Android网络开发中如何使用JSON进行网络通信---Android JSON数据通讯方法解析