




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
android的网络编程分为2种:基于socket的,和基于http协议的。Http通信以xml或者json为载体,相互通信数据。JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。 JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。Socket通信Socket与Http不同的是两个的协议不同,socket是面向TCP/UDP协议的,http通信时面向HTTP协议的。Android对于http网络通信,提供了标准的java接口httpURLConnection接口,以及apache的接口httpclient接口。其中我自己用的比较多的是httpclient这个接口,因为它的功能更为丰富很有效。同时http通信也分为post方式和get的方式,两个相比较的话,post传送的数据量比较大,安全性也比较高。Http通信Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,通过Android单元测试来完成这四种方法。包中的HttpURLConnection类Get方式:1. / Get方式请求2. publicstaticvoid requestByGet() throws Exception 3. String path = /logins.jsp?id=helloworld&pwd=android; 4. / 新建一个URL对象5. URL url = new URL(path); 6. / 打开一个HttpURLConnection连接7. HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); 8. / 设置连接超时时间9. urlConn.setConnectTimeout(5 * 1000); 10. / 开始连接11. urlConn.connect(); 12. / 判断请求是否成功13. if (urlConn.getResponseCode() = HTTP_200) 14. / 获取返回的数据15. byte data = readStream(urlConn.getInputStream(); 16. Log.i(TAG_GET, Get方式请求成功,返回数据如下:); 17. Log.i(TAG_GET, new String(data, UTF-8); 18. else 19. Log.i(TAG_GET, Get方式请求失败); 20. 21. / 关闭连接22. urlConn.disconnect(); 23. Post方式:1. / Post方式请求2. publicstaticvoid requestByPost() throws Throwable 3. String path = /logins.jsp; 4. / 请求的参数转换为byte数组5. String params = id= + URLEncoder.encode(helloworld, UTF-8) 6. + &pwd= + URLEncoder.encode(android, UTF-8); 7. byte postData = params.getBytes(); 8. / 新建一个URL对象9. URL url = new URL(path); 10. / 打开一个HttpURLConnection连接11. HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); 12. / 设置连接超时时间13. urlConn.setConnectTimeout(5 * 1000); 14. / Post请求必须设置允许输出15. urlConn.setDoOutput(true); 16. / Post请求不能使用缓存17. urlConn.setUseCaches(false); 18. / 设置为Post请求19. urlConn.setRequestMethod(POST); 20. urlConn.setInstanceFollowRedirects(true); 21. / 配置请求Content-Type22. urlConn.setRequestProperty(Content-Type, 23. application/x-www-form-urlencode); 24. / 开始连接25. urlConn.connect(); 26. / 发送请求参数27. DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream(); 28. dos.write(postData); 29. dos.flush(); 30. dos.close(); 31. / 判断请求是否成功32. if (urlConn.getResponseCode() = HTTP_200) 33. / 获取返回的数据34. byte data = readStream(urlConn.getInputStream(); 35. Log.i(TAG_POST, Post请求方式成功,返回数据如下:); 36. Log.i(TAG_POST, new String(data, UTF-8); 37. else 38. Log.i(TAG_POST, Post方式请求失败); 39. 40. org.apache.http包中的HttpGet和HttpPost类Get方式:1. / HttpGet方式请求2. publicstaticvoid requestByHttpGet() throws Exception 3. String path = /logins.jsp?id=helloworld&pwd=android; 4. / 新建HttpGet对象5. HttpGet httpGet = new HttpGet(path); 6. / 获取HttpClient对象7. HttpClient httpClient = new DefaultHttpClient(); 8. / 获取HttpResponse实例9. HttpResponse httpResp = httpClient.execute(httpGet); 10. / 判断是够请求成功11. if (httpResp.getStatusLine().getStatusCode() = HTTP_200) 12. / 获取返回的数据13. String result = EntityUtils.toString(httpResp.getEntity(), UTF-8); 14. Log.i(TAG_HTTPGET, HttpGet方式请求成功,返回数据如下:); 15. Log.i(TAG_HTTPGET, result); 16. else 17. Log.i(TAG_HTTPGET, HttpGet方式请求失败); 18. 19. Post方式:1. / HttpPost方式请求2. publicstaticvoid requestByHttpPost() throws Exception 3. String path = /logins.jsp; 4. / 新建HttpPost对象5. HttpPost httpPost = new HttpPost(path); 6. / Post参数7. List params = new ArrayList(); 8. params.add(new BasicNameValuePair(id, helloworld); 9. params.add(new BasicNameValuePair(pwd, android); 10. / 设置字符集11. HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8); 12. / 设置参数实体13. httpPost.setEntity(entity); 14. / 获取HttpClient对象15. HttpClient httpClient = new DefaultHttpClient(); 16. / 获取HttpResponse实例17. HttpResponse httpResp = httpClient.execute(httpPost); 18. / 判断是够请求成功19. if (httpResp.getStatusLine().getStatusCode() = HTTP_200) 20. / 获取返回的数据21. String result = EntityUtils.toString(httpResp.getEntity(), UTF-8); 22. Log.i(TAG_HTTPGET, HttpPost方式请求成功,返回数据如下:); 23. Log.i(TAG_HTTPGET, result); 24. else 25. Log.i(TAG_HTTPGET, HttpPost方式请求失败); 26. 27. 以上是一些部分代码,测试的时候在测试类中运行对应的测试方法即可Socket通信1. 什么是Socket?Socket(套接字)是一种抽象层,应用程序通过它来发送和接收数据,就像应用程序打开了一个文件句柄,将数据读写到稳定的存储器上一样。使用Socket可以将应用程序添加到网络中,并与处于同一网络中的其他应用程序进行通信。一台计算机上的应用程序向socket写入的信息能够被另一台计算机上的另一个应用程序读取,反之依然。根据不同的的底层协议实现,也会很多种不同的Socket。本课当中只覆盖了TCP/IP协议族的内容,在这个协议族当中主要的Socket类型为流套接字(stream socket)和数据报套接字(datagram socket)。流套接字将TCP作为其端对端协议,提供了一个可信赖的字节流服务。数据报套接字使用UDP协议,提供可一个“尽力而为”的数据报服务,应用程序可以通过它发送最长65500字节的个人信息。2. Socket基本通信模型3. 使用基于TCP协议的Socket一个客户端要发起一次通信,首先必须知道运行服务器端的主机IP地址。然后由网络基础设施利用目标地址,将客户端发送的信息传递到正确的主机上,在Java中,地址可以由一个字符串来定义,这个字符串可以使数字型的地址(比如),也可以是主机名()。在Java当中InetAddress类代表了一个网络目标地址,包括主机名和数字类型的地址信息。下面为大家介绍一下基于TCP协议操作Socket的API:ServerSocket:这个类是实现了一个服务器端的Socket,利用这个类可以监听来自网络的请求。a) 创建ServerSocket的方法:ServerSocket(Int localPort)ServerSocket(int localport,int queueLimit)ServerSocket(int localport,int queueLimit,InetAddress localAddr)创建一个ServerSocket必须指定一个端口,以便客户端能够向该端口号发送连接请求。端口的有效范围是0-65535b) ServerSocket操作Socket accept()void closeaccept()方法为下一个传入的连接请求创建Socket实例,并将已成功连接的Socket实例返回给服务器套接字,如果没有连接请求,accept()方法将阻塞等待;close方法用于关闭套接字Socket:a) 创建Socket的方法:Socket(InetAddress remoteAddress,int remotePort)利用Socket的构造函数,可以创建一个TCP套接字后,先连接到指定的远程地址和端口号。b) 操作Socket的方法InputStream getInputStream()OutputStream getOutputStream()void close()操作TCPsocket的图示:4使用基于UDP的Socketa) 创建DatagramPacketDatagramSocket(byte data,int offset,int length,InetAddress remoteAddr,int remotePort)该构造函数创建一个数据报文对象,数据包含在第一个参数当中b) 创建DatagramSocket创建DatagramSocket(int localPort)以上构造函数将创建一个UDP套接字;c) DatagramSocket:发送和接受void send(DatagramPacket packet)void receive(DatagramPacket packet)send()方法用来发送DatagramPacket实例。一旦创建连接,数据报将发送到该套接字所连接的地址;receive()方法将阻塞等待,知道接收到数据报文,并将报文中的数据复制到指定的DatagramPacket实例中5.socket的TCP应用实例Server端代码:public class Server private ServerSocket ss;private Socket socket;private DataInputStream in; private DataOutputStream out; public Server()new ServerThread().start();class ServerThread extends Threadpublic void run() try ss=new ServerSocket(7777);System.out.println(服务器启动了);while(true)socket=ss.accept();System.out.println(有客户端连接到服务器);in=new DataInputStream(socket.getInputStream();out=new DataOutputStream(socket.getOutputStream();String msg=;if(msg=in.readUTF()!=null)System.out.println(msg);out.writeUTF(恭喜你,连接服务器成功!);out.flush(); catch (IOException e) e.printStackTrace();finallytry in.close();out.close(); catch (IOException e) e.printStackTrace();public static void main(String args) throws IOException new Server();Client端代码:public class ClientTCP extends Activity private Button button;private TextView text; public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); button=(Button) fi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度城市更新土地买卖合同范本
- 2025年度汽车租赁公司司机外包合作协议
- 说课数据的收集与课件
- 说好普通话课件
- 2025专业版北京市租赁合同范本
- 红色筑梦者公益课件
- 2025合同撤销权的行使条件
- 高三互相礼让的作文7篇范文
- 销售团队业绩分析模板业绩预测与策略制定工具
- 学校校园网络信息化管理合作协议
- 外委人员管理办法
- 《国家基层肥胖症综合管理技术指南(2025)》解读
- 邮储银行招聘考试笔试试题集及参考答案
- 投标部奖罚管理办法
- 补充耕地后期管护方案(3篇)
- 设备设施运行台账教学幻灯片
- 健康四大基石科普讲座
- 护士培训班自我介绍
- 2025深入贯彻中央八项规定精神学习教育测试题和答案
- 音乐人工智能应用-洞察阐释
- 2026年中考英语一轮复习:1600个必背词汇 话题记忆+默写本
评论
0/150
提交评论