`
MagicMa_007
  • 浏览: 27050 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Socket 网络编程

    博客分类:
  • Java
阅读更多

 

基于Socket的网络编程

Android的网络编程部分,基本上和Java的网络编程是一样的,基本上也分成两种,一种是基于Socket的,另外一种是基于Http协议的。

基于Socket的基本用法,跟Java里面的用法一样,简单回顾一下:

一:服务端
1:启动一个服务器端的socket:ServerSocket server = new ServerSocket(1234);
2:开始侦听请求:Socket client = server.accept();
3:取得输入和输出流:
4:然后就可以通过流来进行网络传输了
5:最好要记得关闭流和Server

java代码:
  1. ServerSocket server=new ServerSocket(1234);    
  2. Socket client=server.accept();    
  3. InputStream in = client.getInputStream();    
  4. OutputStream out=client.getOutputStream();    
  5.    
  6. byte bs[] = new byte[1024];  
  7. in.read(bs);  
  8. String str= new String(bs);  
  9. System.out.println(str);    
  10. out.write("Server send".getBytes());    
  11. out.flush();  
  12. client.close();  
 
二:客户端:
1:发起一个socket连接:Socket server = new Socket("192.168.1.2",1234);
2:取得输入和输出流:
3:然后就可以通过流来进行网络传输了
4:最好要记得关闭流和Socket

java代码:
  1. String str = "client send";  
  2. out.write(str.getBytes());  
  3. out.flush();  
  4.    
  5. byte bs[] = new byte[1024];  
  6. in.read(bs);  
  7. System.out.println(new String(bs));  
  8. server.close();  
当然这样实现很不好,应该包装成上层的流或者Reader、Writer来做。

包装成Reader和Writer的服务端示例:

 

java代码:
  1. ServerSocket server=new ServerSocket(1234);    
  2. Socket client=server.accept();    
  3. BufferedReader in=   
  4. new BufferedReader(new InputStreamReader(client.getInputStream()));    
  5. PrintWriter out=new PrintWriter(client.getOutputStream());    
  6. String str=in.readLine();    
  7. System.out.println(str);    
  8. out.println("Server send");    
  9. out.flush();  

包装成Reader和Writer的客户端示例:


java代码:
  1. Socket server = new Socket("192.168.0.100"1234);  
  2. BufferedReader in = new BufferedReader(new InputStreamReader(  
  3. server.getInputStream()));  
  4. PrintWriter out = new PrintWriter(server.getOutputStream());  
  5. String str = "client send";  
  6. out.println(str);  
  7. out.flush();  
  8. System.out.println(in.readLine());  
  9. server.close();  

使用HttpURLConnection

基于Http协议的基本用法,可以使用HttpURLConnection,也可以使用Apache的Http操作包,具体的使用方式下面分别来示例。

要让应用使用网络,需要在Manifest文件中添加权限:


java代码:
  1. <uses-permission android:name="android.permission.INTERNET" />  
  2. HttpURLConnection默认使用get的方式与后台交互  
  3. HttpURLConnection conn = null;  
  4. try {  
  5. URL  u = new URL("http://192.168.0.100:8080/test.jsp?uuid=123");  
  6. conn = (HttpURLConnection)u.openConnection();  
  7. BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));  
  8. String line = "";  
  9. while((line=br.readLine())!=null){  
  10. Log.i("NetTest","lien="+line);  
  11. }  
  12. catch (Exception e) {e.printStackTrace();}  
  13. finally{ conn.disconnect();}  

请注意一点,在Android3.0以上的版本里面,已经不允许直接在Activity里面进行网络的处理了,建议使用后台线程或者是干脆新建一个线程来运行,比如:


java代码:
  1. Thread t =new Thread(new Runnable() {  
  2. public void run() {  
  3. //上面的代码  
  4. }  
  5. });  
  6. t.start();  

HttpURLConnection使用Post的方式与后台交互,下载数据部分跟上一个示例是一样的,麻烦在于上传数据到服务器,需要进行设置和处理,如下:


java代码:
  1. URL  u = new URL("http://192.168.0.100:8080/test.jsp");  
  2. conn = (HttpURLConnection)u.openConnection();  
  3. //因为这个是post请求,下面两个需要设置为true   
  4. conn.setDoOutput(true);   
  5. conn.setDoInput(true);   

java代码:
  1. // 设置以POST方式   
  2. conn.setRequestMethod("POST");   
  3. // Post 请求不能使用缓存   
  4. conn.setUseCaches(false);   
  5. conn.setInstanceFollowRedirects(true);   
  6. // 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的   
  7. conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");   
  8. //DataOutputStream流   
  9. DataOutputStream out = new DataOutputStream(conn.getOutputStream());   
  10. //要上传的参数   
  11. String content = "uuid=" + URLEncoder.encode("post测试""utf-8");   
  12. //将要上传的内容写入流中   
  13. out.writeBytes(content);    
  14. //刷新、关闭   
  15. out.flush();   
  16. out.close();  

使用Apache的Http操作包来实现以Get的方式与后台交互,示例如下:


java代码:
  1. //封装用于请求的 方法 对象  
  2. HttpGet get = new HttpGet("http://192.168.0.100:8080/test.jsp?uuid=uuid121&name=name222");  
  3. //创建一个Http的客户端对象  
  4. HttpClient client = new DefaultHttpClient();  
  5. try//发送请求,并获得返回对象  
  6. HttpResponse response = client.execute(get);  
  7. //从response对象里面把返回值取出来  
  8. HttpEntity entity = response.getEntity();  
  9. //得到返回内容的流,接下来就是流式操作了  
  10. InputStream in = entity.getContent();  
  11. BufferedReader reader = new BufferedReader(new InputStreamReader(in));  
  12. StringBuffer buffer = new StringBuffer();  
  13. String tempStr = "";  
  14. while((tempStr=reader.readLine())!=null){  
  15. buffer.append(tempStr);  
  16. }  
  17. in.close();//应该写finally里面去  
  18. reader.close();//应该写finally里面去  
  19. Log.i("javass",buffer.toString());  
  20. }catch(Exception err){err.printStackTrace();}  
  21.    

使用Apache的Http操作包来实现以Post的方式与后台交互,示例如下:


java代码:
  1. //封装用于请求的 方法 对象  
  2. HttpPost post = new HttpPost("http://192.168.0.100:8080/test.jsp");  
  3. //为post组织参数  
  4. NameValuePair uuid = new BasicNameValuePair("uuid","postUuid");  
  5. NameValuePair name = new BasicNameValuePair("name","postname");  
  6. List<NameValuePair> list = new ArrayList<NameValuePair>();  
  7. list.add(uuid);  
  8. list.add(name);  
  9. //把这些参数封装到HttpEntity中  
  10. HttpEntity reqEntity = null;  
  11. reqEntity = new UrlEncodedFormEntity(list);  
  12. //然后把HttpEntity设置到post对象里面去  
  13. post.setEntity(reqEntity);  
  14.    
  15. //创建一个Http的客户端对象  
  16. HttpClient client = new DefaultHttpClient();  
  17. //发送请求,并获得返回对象  
  18. HttpResponse response = client.execute(post);  
后面获取response的Entity等的处理,跟get方式是完全一样的,这里就不去赘述了。

操作JSON

在实际应用开发中,网络间传输的数据经常是JSON格式的,除非十分有必要,不会去使用XML。因此必须要掌握Android如何处理JSON数据,Android已经自带了JSON的处理包“org.json”。下面就来看看如何解析已经获取的数据,获取数据的过程就是前面讲的获取的网络返回值。

返回单个对象的情况,示例如下:


java代码:
  1. JSONObject j = new JSONObject(jsonData);  
  2. String uuid = j.getString(“uuid");  

返回对象数组的情况,示例如下:


java代码:
  1. JSONArray ja = new JSONArray(jsonData);  
  2. for(int i=0;i<ja.length();i++){  
  3. JSONObject j = ja.getJSONObject(i);  
  4. String retUuid = j.getString("uuid");  
  5. String retName = j.getString("name");  
  6. Log.i("javass","ret jsonsss uuid="+retUuid+",name="+retName);  
  7. }  
视频配套PPT,视频地址【 Android4开发入门经典独家视频课程
分享到:
评论

相关推荐

    MFC socket网络编程

    本知识点将详细解析如何使用MFC进行Socket网络编程,以创建一个服务器/客户端应用程序。 ### MFC Socket网络编程要点 #### 1. Socket在网络通信中的角色 在计算机网络通信中,Socket被设计为一个网络通信的端点,...

    socket网络编程

    ### Socket网络编程知识点详解 #### 一、Socket网络编程概述 **Socket编程**是指通过使用Socket接口进行网络通信的一种编程方式。它广泛应用于各种网络应用程序的设计与开发之中,特别是那些需要进行远程通信的...

    WindowsSocket网络编程.pdf

    Windows Socket 网络编程 Windows Socket 网络编程是指在Windows操作系统中使用Socket API进行网络编程的技术。Socket是一种标准的网络编程接口,允许不同的操作系统和网络协议进行通信。 一、 客户机/服务器模式...

    python socket 网络编程

    在"python socket 网络编程"这个主题中,我们将深入探讨如何利用socket进行文件传输、命令行执行等核心功能。 一、Python Socket基础 Python中的socket模块源于C语言的socket接口,它提供了TCP/IP协议族的网络通信...

    Socket网络编程进阶与实战系统掌握Socket核心技术

    Socket网络编程进阶与实战系统掌握Socket核心技术,本课程将理论结合实践,带你从零开始,系统学习Socket编程技术,让Socket的学习不再那么零散与难以掌握,同时会提炼出Socket网络传输的核心思想与构架,并带你踩坑...

    Socket网络编程1

    Socket网络编程是计算机科学中一个重要的领域,主要涉及在不同设备间通过网络进行通信的技术。在本主题中,我们将深入探讨Socket的基本概念、工作原理以及如何在实际项目中应用。 首先,我们来看“网络编程概述”。...

    C++ Socket网络编程大全

    《C++ Socket网络编程大全》是一本专注于C++语言实现Socket网络编程的资源集合,它包含了大量的代码片段和实用示例,旨在帮助开发者理解和掌握网络通信的核心技术。Socket编程是计算机网络中的重要组成部分,它提供...

    JAVA Socket 网络编程教程

    Java Socket网络编程是Java开发中一个重要的组成部分,它允许应用程序通过网络进行通信,实现客户端与服务器之间的数据交换。本教程将深入探讨Java Socket编程的基本概念、原理和实践应用。 一、Socket基本概念 ...

    精通windows socket网络编程VC++

    本资源"精通windows socket网络编程VC++"显然是一份专注于利用VC++进行Winsock网络编程的学习资料,包含光盘代码内容,旨在帮助开发者深入理解和实践这一技术。 Windows Socket API为开发者提供了在Windows平台上...

    Socket 网络编程例子程序

    Socket网络编程是计算机科学中的一个重要领域,特别是在分布式系统和互联网应用程序中。本示例程序是为C++ Builder开发者提供的一种学习资源,旨在帮助他们理解和掌握Socket编程的基本概念和技巧。 Socket,也称为...

    c# Socket网络编程实例

    Socket网络编程是计算机通信领域中的核心技术之一,尤其在C#编程环境下,Socket提供了一种标准的方式来实现客户端和服务器之间的通信。本实例主要关注C#语言下的Socket网络编程,特别是客户端的实现,它允许应用程序...

    Socket网络编程3

    Socket网络编程是计算机网络通信的核心技术之一,尤其在开发分布式应用和互联网服务时不可或缺。"Socket网络编程3"这个主题通常会深入讲解如何利用Socket进行TCP协议的客户端和服务器端编程,实现类似QQ聊天这样的...

    socket网络编程教程

    本文所介绍的socket网络编程是指使用套接字接口进行的网络通信编程,它是网络编程中应用最广泛的一种形式。在了解socket网络编程之前,我们需要掌握一些基础知识,例如主机字节序与网络字节序的概念及它们之间的转换...

    Socket网络编程2

    Socket网络编程是计算机通信领域中的基础技术,它允许应用程序通过网络进行数据传输。在这个主题下,我们将深入探讨UDP和TCP两种主要的传输协议在Socket编程中的应用。 首先,我们来看"第三节(UDP客户端代码实现)...

    实用socket网络编程教程

    实用socket网络编程教程实用socket网络编程教程实用socket网络编程教程实用socket网络编程教程

    Java socket网络编程的基础示例

    Java Socket网络编程是Java平台中实现网络通信的核心技术,它基于传输层协议TCP和UDP,为应用程序提供了低级别的、原始的比特流服务。本基础示例将深入探讨这两种协议下的Socket编程。 首先,TCP(Transmission ...

    socket网络编程(源代码)

    Socket网络编程是计算机科学中用于实现网络通信的一种接口,它允许程序通过Internet协议进行数据交换。在本资源中,"socket网络编程(源代码)"提供了实现这一功能的具体示例,便于开发者理解和学习如何创建自己的...

    Socket网络编程-文件上传

    Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-...

    socket网络编程--有详细的描述及源代码演示

    本资源包提供了一套全面的教程,旨在帮助初学者深入理解和掌握Socket网络编程,包括理论基础和实践示例。 首先,"socket编程详解.txt"可能会涵盖以下几个方面: 1. **Socket概念**:Socket,即套接字,是网络通信...

Global site tag (gtag.js) - Google Analytics