Android网络编程核心技术(二)Java接口和Android接口

来源:互联网 发布:unity3d在线编辑器 编辑:程序博客网 时间:2024/05/18 03:51

          Android网络通信的大部分情况使用Apache接口都能解决,但有些情况,使用java接口似乎更简单点,这篇文章简单介绍一下java网络编程在Android中的应用。

          1.URL地址

          在java中直接提供了类URL来处理和URl相关的知识。下面是一段简单代码:

          URL URL= new URL(StringUrl);

          try{

               InputStream inStream = url.openStream();

               int c = 0;

               do{

                    c = inStream.read();

                    if(c!=-1)

                       System.out.print((char)c);

               }while(c!=-1)

          }catch...

        2.套接字Socket类 

      要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IPTransmission Control Protocol/Internet Protocol)定义了主机如何连入因特网及数据如何 在它们之间传输。不同于ISO模型的七个分层,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中

      应用层:TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等

     传输层:TCP,UDP

     网络层:IP,ICMP,OSPF,EIGRP,IGMP

     数据链路层:SLIP,CSLIP,PPP,MTU

     每一抽象层建立在低一层提供的服务上,并且为高一层提供服务,看起来大概是这样子的

      还不明白的可以参考百度百科http://baike.baidu.com/item/TCP%2FIP%E5%8D%8F%E8%AE%AE?fromId=7729,篇幅所限,不在赘述。

       我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在一台主机唯一,这时候我们需要另辟它径了。我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号(port)可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。

       能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,我们经常把socket翻译为套接字。

         try{

               Socket socket = new Socket(ip,port);

               InputStream inStream = socket.getInputStream();//读取服务器返回数据

               OutPutStream outStream= socket.getOutputStream();//向服务器传递数据

               PrintStream printstream = new PrintStream(outStream);

               printStream.println("hello world");

               DataInputStream dataInput = newDataInputStream(inStream);

               String requese = dataInput.readUTF();

               socket.close();

          }catch...

           3.URLConnection类

         下面的范例使用java的URLConnection类查看网页:

           URL url = new URL(...);

           URLConnection conn = url.openConnection();

         BufferedReader  reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
             StringBuffer line = reader.readLine();
             while(line!=null){
                       line.append(line) ;
                       line = reader.readLine();
              }
         4.Android网络接口
        android.net.*包实际是通过Apache中HttpClient的封装来实现的一个HTTP编程接口,同时还提供了Http请求队列管理以及Http连接池管理,以提高并发请求情况下(如装载网页时)的效率还包括 网络状态监视等接口,网络访问的Socket,常用的Uri类以及有关WiFi相关的类等等。
   下例为最简单的Socket连接
   try{
    InetAddress ia = InetAddress.getByName("192.168.1.110");//IP地址
    Socket sk = new Socket(ia,61203,true);//端口
    InputStream is =sk.getInputStream();//得到数据
    OutputStream os = sk.getOutputStream();
    .....//数据处理
    os.close();
    is.close();
    sk.close();
   }catch(UnknownHostException e){
   }catch(IOException e){
   }

0 0