Android平台有三种网络接口可以使用,他们分别是:java.net.*(标准Java接口)、Org.apache接口和Android.net.*(Android网络接口)。下面分别介绍这些接口的功能和作用。

1.标准Java接口
java.net.*提供与联网有关的类,包括流、数据包套接字(socket)、Internet协议、常见Http处理等。比如:创建URL,以及URLConnection/HttpURLConnection对象、设置链接参数、链接到服务器、向服务器写数据、从服务器读取数据等通信。这些在Java网络编程中均有涉及,我们看一个简单的socket编程,实现服务器回发客户端信息。
服务端:

 1 public class Server implements Runnable{   2     @Override   3     public void run() {   4         Socket socket = null;   5         try {   6             ServerSocket server = new ServerSocket(18888);   7             //循环监听客户端链接请求   8             while(true){   9                 System.out.println("start...");  10                 //接收请求  11                 socket = server.accept();  12                 System.out.println("accept...");  13                 //接收客户端消息  14                 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));  15                 String message = in.readLine();  16                 //发送消息,向客户端  17                 PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);  18                 out.println("Server:" + message);  19                 //关闭流  20                 in.close();  21                 out.close();  22             }  23         } catch (IOException e) {  24             e.printStackTrace();  25         }finally{  26             if (null != socket){  27                 try {  28                     socket.close();  29                 } catch (IOException e) {  30                     e.printStackTrace();  31                 }  32             }  33         }  34           35     }  36     //启动服务器  37     public static void main(String[] args){  38         Thread server = new Thread(new Server());  39         server.start();  40     }  41 }  

客户端,MainActivity

 1 public class MainActivity extends Activity {   2     private EditText editText;   3     private Button button;   4     /** Called when the activity is first created. */   5     @Override   6     public void onCreate(Bundle savedInstanceState) {   7         super.onCreate(savedInstanceState);   8         setContentView(R.layout.main);   9           10         editText = (EditText)findViewById(R.id.editText1);  11         button = (Button)findViewById(R.id.button1);  12           13         button.setOnClickListener(new OnClickListener() {  14             @Override  15             public void onClick(View v) {  16                 Socket socket = null;  17                 String message = editText.getText().toString()+ "\r\n" ;  18                 try {  19                     //创建客户端socket,注意:不能用localhost或127.0.0.1,Android模拟器把自己作为localhost  20                     socket = new Socket("<span style="font-weight: bold;">10.0.2.2</span>",18888);  21                     PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter  22                             (socket.getOutputStream())),true);  23                     //发送数据  24                     out.println(message);  25                       26                     //接收数据  27                     BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));  28                     String msg = in.readLine();  29                     if (null != msg){  30                         editText.setText(msg);  31                         System.out.println(msg);  32                     }  33                     else{  34                         editText.setText("data error");  35                     }  36                     out.close();  37                     in.close();  38                 } catch (UnknownHostException e) {  39                     e.printStackTrace();  40                 } catch (IOException e) {  41                     e.printStackTrace();  42                 }  43                 finally{  44                     try {  45                         if (null != socket){  46                             socket.close();  47                         }  48                     } catch (IOException e) {  49                         e.printStackTrace();  50                     }  51                 }  52             }  53         });  54     }  55 }  

布局文件:

 1 <?xml version="1.0" encoding="utf-8"?>   2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   3     android:orientation="vertical" android:layout_width="fill_parent"   4     android:layout_height="fill_parent">   5     <TextView android:layout_width="fill_parent"   6         android:layout_height="wrap_content" android:text="@string/hello" />   7     <EditText android:layout_width="match_parent" android:id="@+id/editText1"   8         android:layout_height="wrap_content"   9         android:hint="input the message and click the send button"  10         ></EditText>  11     <Button android:text="send" android:id="@+id/button1"  12         android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>  13 </LinearLayout>  

启动服务器:

1 javac com/test/socket/Server.java  2 java com.test.socket.Server  

运行客户端程序:

结果如图:

【Android笔记】Android的三种网络通信方式

注意:服务器与客户端无法链接的可能原因有:
没有加访问网络的权限:<uses-permission android:name="android.permission.INTERNET"></uses-permission>
IP地址要使用:10.0.2.2
模拟器不能配置代理。

2。Apache接口

对于大部分应用程序而言JDK本身提供的网络功能已远远不够,这时就需要Android提供的Apache HttpClient了。它是一个开源项目,功能更加完善,为客户端的Http编程提供高效、最新、功能丰富的工具包支持。
下面我们以一个简单例子来看看如何使用HttpClient在Android客户端访问Web。
首先,要在你的机器上搭建一个web应用myapp,只有很简单的一个http.jsp
内容如下:

 1 <%@page language="java" import="java.util.*" pageEncoding="utf-8"%>   2 <html>   3 <head>   4 <title>   5 Http Test   6 </title>   7 </head>   8 <body>   9 <%  10 String type = request.getParameter("parameter");  11 String result = new String(type.getBytes("iso-8859-1"),"utf-8");  12 out.println("<h1>" + result + "</h1>");  13 %>  14 </body>  15 </html>  

然后实现Android客户端,分别以post、get方式去访问myapp,代码如下:
布局文件:

 1 <?xml version="1.0" encoding="utf-8"?>   2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   3     android:orientation="vertical"   4     android:layout_width="fill_parent"   5     android:layout_height="fill_parent"   6     >   7 <TextView   8     android:gravity="center"   9     android:id="@+id/textView"    10     android:layout_width="fill_parent"  11     android:layout_height="wrap_content"  12     android:text="@string/hello"  13     />  14 <Button android:text="get" android:id="@+id/get" android:layout_width="match_parent" android:layout_height="wrap_content"></Button>  15 <Button android:text="post" android:id="@+id/post" android:layout_width="match_parent" android:layout_height="wrap_content"></Button>  16 </LinearLayout>  

资源文件:
strings.xml

1 <?xml version="1.0" encoding="utf-8"?>  2 <resources>  3     <string name="hello">通过按钮选择不同方式访问网页</string>  4     <string name="app_name">Http Get</string>  5 </resources>  

主Activity:

  1 public class MainActivity extends Activity {    2     private TextView textView;    3     private Button get,post;    4     /** Called when the activity is first created. */    5     @Override    6     public void onCreate(Bundle savedInstanceState) {    7         super.onCreate(savedInstanceState);    8         setContentView(R.layout.main);    9            10         textView = (TextView)findViewById(R.id.textView);   11         get = (Button)findViewById(R.id.get);   12         post = (Button)findViewById(R.id.post);   13            14         //绑定按钮监听器   15         get.setOnClickListener(new OnClickListener() {   16             @Override   17             public void onClick(View v) {   18                 //注意:此处ip不能用127.0.0.1或localhost,Android模拟器已将它自己作为了localhost   19                 String uri = "http://192.168.22.28:8080/myapp/http.jsp?parameter=以Get方式发送请求";   20                 textView.setText(get(uri));   21             }   22         });   23         //绑定按钮监听器   24         post.setOnClickListener(new OnClickListener() {   25             @Override   26             public void onClick(View v) {   27                 String uri = "http://192.168.22.28:8080/myapp/http.jsp";   28                 textView.setText(post(uri));   29             }   30         });   31     }   32     /**  33      * 以get方式发送请求,访问web  34      * @param uri web地址  35      * @return 响应数据  36      */   37     private static String get(String uri){   38         BufferedReader reader = null;   39         StringBuffer sb = null;   40         String result = "";   41         HttpClient client = new DefaultHttpClient();   42         HttpGet request = new HttpGet(uri);   43         try {   44             //发送请求,得到响应   45             HttpResponse response = client.execute(request);   46                47             //请求成功   48             if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){   49                 reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));   50                 sb = new StringBuffer();   51                 String line = "";   52                 String NL = System.getProperty("line.separator");   53                 while((line = reader.readLine()) != null){   54                     sb.append(line);   55                 }   56             }   57         } catch (ClientProtocolException e) {   58             e.printStackTrace();   59         } catch (IOException e) {   60             e.printStackTrace();   61         }   62         finally{   63             try {   64                 if (null != reader){   65                     reader.close();   66                     reader = null;   67                 }   68             } catch (IOException e) {   69                 e.printStackTrace();   70             }   71         }   72         if (null != sb){   73             result =  sb.toString();   74         }   75         return result;   76     }   77     /**  78      * 以post方式发送请求,访问web  79      * @param uri web地址  80      * @return 响应数据  81      */   82     private static String post(String uri){   83         BufferedReader reader = null;   84         StringBuffer sb = null;   85         String result = "";   86         HttpClient client = new DefaultHttpClient();   87         HttpPost request = new HttpPost(uri);   88            89         //保存要传递的参数   90         List<NameValuePair> params = new ArrayList<NameValuePair>();   91         //添加参数   92         params.add(new BasicNameValuePair("parameter","以Post方式发送请求"));   93            94         try {   95             //设置字符集   96             HttpEntity entity = new UrlEncodedFormEntity(params,"utf-8");   97             //请求对象   98             request.setEntity(entity);   99             //发送请求  100             HttpResponse response = client.execute(request);  101               102             //请求成功  103             if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){  104                 System.out.println("post success");  105                 reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));  106                 sb = new StringBuffer();  107                 String line = "";  108                 String NL = System.getProperty("line.separator");  109                 while((line = reader.readLine()) != null){  110                     sb.append(line);  111                 }  112             }  113         } catch (ClientProtocolException e) {  114             e.printStackTrace();  115         } catch (IOException e) {  116             e.printStackTrace();  117         }  118         finally{  119             try {  120                 //关闭流  121                 if (null != reader){  122                     reader.close();  123                     reader = null;  124                 }  125             } catch (IOException e) {  126                 e.printStackTrace();  127             }  128         }  129         if (null != sb){  130             result =  sb.toString();  131         }  132         return result;  133     }  134 }  

运行结果如下:

【Android笔记】Android的三种网络通信方式

【Android笔记】Android的三种网络通信方式

3.android.net编程:
常常使用此包下的类进行Android特有的网络编程,如:访问WiFi,访问Android联网信息,邮件等功能。这里不详细讲。

参考原文:http://blog.csdn.net/yuzhiboyi/article/details/7743390

更多相关文章

  1. Android AIDL接口定义语言
  2. android开发数据存储方式
  3. 通过Android 客户端上传数据到服务器
  4. emulator找不到AVD解决方式
  5. Android四种存储方式 sharedpreference,file,SQlite,contentprov
  6. android添加文件打开方式以及参数传递
  7. android 动画使用方式
  8. 使用calabash测试开源中国Android客户端

随机推荐

  1. Android(安卓)自动完成文本框的实例
  2. android studio 实现再按一次返回键退出
  3. Android(安卓)音效提示与振动提示
  4. Android联网方式判断
  5. android短信监听
  6. android 三种解析,构建xml方法
  7. Android(安卓)线程
  8. 【Android】如何寻找出某个Intent是否可
  9. Android中如何实现EditText的自动换行
  10. Android(安卓)Studio中Android(安卓)Parc