Android网络通讯简介

  网络通信应该包含三部分的内容:发送方、接收方、协议栈。发送方和接收方是参与通信的主体,协议栈是发送方和接收方进行通信的契约。按照服务类型,网络通信可分为面向连接和无连接的方式。面向连接是在通信前建立通信链路,而通信结束后释放该链路。无连接的方式则不需要在通信前建立通信连接,这种方式不保证传输的质量。

  Android提供了多种网络通信的方式,如Java中提供的网络编程,在Android中都提供了支持。Android中常用的网络编程方式如下:

  • 针对TCP/IP协议的Socket和ServerSocket;

  • 针对HTTP协议的网络编程,如HttpURLConnection和HttpClient;

  • 直接使用WebKit访问网络。

Socket通信

  Socket通信是指双方采用Socket机制交换数据。Socket是比较低层的网络编程方式,其他的高级协议(如HTTP)都是建立在此基础之上的,而且Socket是跨平台的编程方式,可以在异构语言之间进行通信,所以掌握Socket网络编程是掌握其他网络编程方式的基础。

  
Socket和ServerSocket

    Socket通常称为“套接字”,这个套接字用来描述通信链的句柄:IP地址和端口。通过套接字,应用程序之间可以传输信息。常见的网络协议有TCP和UDP两种,TCP协议是可靠的、面向连接的协议,这种方式需要在通信前建立通信双方的连接链路,而通信结束后又释放该链路。而UDP数据报协议是不可靠的、无连接的协议,这种协议不需要在通信前建立通信双方的连接。因而UDP牺牲可靠性来降低传输开销,其传输开销比TCP小。

  java.net包中提供了一下两个Socket类。

  • java.net.Socket是客户端的Socket对应的类;

  • java.net.ServerSocket是服务器端的Socket对应的类,这个类表示一个等待客户端连接的服务器端套接字。

  Socket类:

  Socket类常用的方法如下表所示 







































方法 功能描述
Socket(String host,int port) Socket提供7个构造函数。该构造函数带两个参数,用于创建一个到主机位host、端口号为port的套接字,并连接到远程主机
bind(SocketAdderss localAddr) 将该Socket同参数localAddr指定的地址和端口绑定
InetAddress getInetAddress() 获取该Socket连接的目标主机的IP地址
synchronized int
getReceiveBufferSize()
获取该Socket的接收缓冲区的尺寸
synchronized void close() 关闭Socket
InputStream getInputStream() 获取该Socket的输入流,这个输入流用来读取数据
boolean isConnected() 判断该Socket是否连接
boolean isOutputShutdown() 判断该Socket的输出管道是否关闭
boolean isInputShutdown() 判断该Socket的输入管道是否关闭
SocketAddress
getLocalSocketAddress()
获取此Socket的本地地址和端口
int getPort() 获取端口号

  一般情况下,Socket的工作步骤如下:

  1. 根据指定地址和端口号创建一个Socket对象

  2. 调用getInputStream()方法或getOutputStream()方法打开连接到Socket的输入/出流。

  3. 客户端与服务器根据一定的协议交互,知道关闭连接。

  4. 关闭客户端的Socket。

  下面代码是一个Socket客户端 


 1 public class TCPClient{
2 public static void main(String args[]){
3 try{
4 //创建一个Socket对象,指定服务器端的IP地址和端口号
5 Socket socket=new Socket("192.168.1.88",4700);
6 //使用InputStream读取硬盘上的文件
7 InputStream inputStream=new FileInputStream("f://file/words.txt");
8 //从Socket当中得到OutputStream
9 OutputStream outputStream=socket.getOutputStream();
10 byte buffer[]=new byte[4*1024];
11 int temp=0;
12 //将InputStream当中的数据取出,并写入到OutputStream当中
13 while((temp=inputStream.read(buffer))!=-1){
14 outputStream.write(buffer,0,temp);
15 }
16 outputStream.flush();
17 }catch(Exception e){
18 e.printStackTrace();
19 }
20 }
21 }
22 /* UDP客户端
23 * public class UDPClient{
24 public static void main(String args[]){
25 try{
26 //首先创建一个DatagramSocket对象
27 DatagramSocket socket=new DatagramSocket(4567);
28 //创建一个InetAddress
29 InetAddress serverAddress=InetAddress.getByName("192.168.1.88");
30 String str="hello";
31 byte data[]=str.getBytes();
32 //创建一个DatagramPacket对象,并指定要将这个数据包发送到网络当中的哪个地址以及端口号
33 DatagramPacket packet=new DatagramPacket(data,data.length,serverAddress,4567);
34 //调用socket对象的send方法,发送数据
35 socket.send(packet);
36 }catch(Exception e){
37 e.printStackTrace();
38 }
39 }
40 }

    ServerSocket类:

    ServerSocket用于监听在特定端口的TCP连接、当客户端的Socket试图与服务器指定端口建立连接时,服务器被激活,判定客户程序的连接,一旦客户端与服务器建立了连接,则两者之间就可以相互传送数据、ServerSocket常用的方法如下表































方法 功能描述
ServerSocket(int Port) ServerSocket构造函数
Socket accept() 等待客户端的连接,当客户端请求连接时,返回一个Socket
void close() 关闭服务器Socket
SocketAddress
getLocalSocketAddress()
获取此Socket的本地地址和端口
int getLocalPort() 获取端口号
InetAddress getInetAddress() 获取该Socket的IP地址
boolean isClosed() 判断连接是否关闭
void setSo Timeout(int
timeout)
设置accept的超时时间

    一般情况下,ServerSocket的工作步骤如下:

  1. 根据指定端口创建一个新的ServerSocket对象

  2. 调用ServerSocket的accept()方法,在指定的端口监听到来的连接。accept()一直处于阻塞状态,直到有客户端试图建立连接。这时accept()方法返回连接客户端与服务器的Socket对象。

  3. 调用getInputStream()方法或getOutputStream()方法建立与客户端交互的输入/输出流。

  4. 服务器与客户端根据一定的协议交互,直到关闭连接。

  5. 关闭服务器端的Socket。

  6. 回到第2步,继续监听下一次的连接。

  下面代码片段是一个服务器端ServerSocket的线程。


 1 new Thread()
2 {
3 public void run(){
4 //声明一个ServerSocket对象
5 ServerSocket serverSocket=null;
6 try{
7 //创建一个ServerSocket对象在端口4700监听客户请求
8 serverSocket=new ServerSocket(4700);
9 //调用ServerSocket的accept()方法,接收客户端所发来的请求
10 Socket socket=serverSocket.accept();
11 //从Socket当中得到InputStream对象
12 InputStream inputStream=socket.getInputStream();
13 byte[] buffer[]=new byte[1024*4];
14 int temp=0;
15 //从InputStream当中读取客户端所发送的数据
16 while((temp=inputStream.read(buffer))!=-1){
17 System.out.println(new String(buffer,0,temp));
18 }
19 }catch(IOException e){
20 e.printStackTrace();
21 }
22 finally{
23 try{
24 serverSocket.close();
25 }catch(IOException e){
26 e.printStackTrace();
27 }
28 }
29 }
30 }
31 /*使用UDP协议的服务端
32 *public void run(){
33 try{
34 //创建一个DatagramSocket对象,并指定监听的端口号
35 DatagramSocket socket=new DatagramSocket(4567);
36 byte data[]=new byte[1024];
37 //创建一个空的DatagramPacket对象
38 DatagramSocket packet=new DatagramPacket(data,data.length);
39 //使用receive方法接收客户端所发送的数据
40 socket.receive(packet);
41 String result=new String(packet.getData(),packet.getOffset(),packet.getLength());
42 System.out.println(result);
43 }catch(Exception e){
44 e.printStackTrace();
45 }
46 }
47 }
48 }*/

    

Android网络通讯简介,码迷,mamicode.com

时间: 2024-10-02 02:39:10

Android网络通讯简介的相关文章

网络--三种网络通讯方式及Android的网络通讯机制

Android平台有三种网络接口可以使用,他们分别是:java.net.*(标准Java接口).Org.apache接口和Android.net.*(Android网络接口).下面分别介绍这些接口的功能和作用. 1.标准Java接口 java.net.*提供与联网有关的类,包括流.数据包套接字(socket).Internet协议.常见Http处理等.比如:创建URL,以及URLConnection/HttpURLConnection对象.设置链接参数.链接到服务器.向服务器写数据.从服务器读取

Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- Android包 : android.net 包 (1接口, 19类, 3枚举, 1异常), android.net.http 包 (6类), android.net.nsd 包 (3接口, 2类), android.net.rtp (4类), android.net.sip 包 (1接口, 9类, 1

android之ConnectivityManager简介,网络连接状态

android之ConnectivityManager简介,网络连接状态

Android网络编程网上文章总结

关于网络编程,网上也有许多好的文章,这里我就选了几篇觉得不错的归纳到了一起,仅供参考 Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包套接字(socket).Internet协议.常见Http处理等.比如:创建URL,以及URLConnection/HttpURLConnection对象.设置链接参数.链接到服务器.向服务器写数据.从服务器读取数

Android网络请求框架AsyncHttpClient实例详解(配合JSON解析调用接口)

最近做项目要求使用到网络,想来想去选择了AsyncHttpClient框架开进行APP开发.在这里把我工作期间遇到的问题以及对AsyncHttpClient的使用经验做出相应总结,希望能对您的学习有所帮助. 首先按照惯例先来简单了解一些AsyncHttpClient网络框架的一些知识. 1.简介 Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnect,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用android-a

Android网络(3):HttpClient作客户端,Tomcat Servlet作服务器的交互示例

前面相继介绍了Android网络编程里的Socket传输图片.HttpURLConnection,今天看HttpClient. 第一部分:JavaEE版的Eclipse配置Tomcat [备注:开发后台服务器用Eclipse的JavaEE版最好的,但单就Tomcat来说(不写jsp之类的),本文下面的服务器方面操作在普通版的Eclipse也是可以的.我这里为了和ADT-bundle分开,特意重新安个JavaEE版的Eclipse.] 1.下载Eclipse的Tomcat插件:http://www

Android网络编程系列 一 Socket抽象层

在<Android网络编程>系列文章中,前面已经将Java的通信底层大致的描述了,在我们了解了TCP/IP通信族架构及其原理,接下来我们就开始来了解基于tcp/ip协议层的Socket抽象层.本篇文章将会让我们清楚的了解和学会使用Socket. 什么是Socket?它又是如何运作的?它的表现形式是什么?等等这些问题,本篇文章将逐步的揭晓. 一. 什么是Socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,你可以借助它建立TCP连接等等,而http是个应用层的

天地币:所用到的 Android Socket 通讯编程技术试验

1.为了开发"天地币"这个Android手机项目,须要用到Socket编程. 2.天地币是一种类似于比特币的虚拟货币. 3.为了赚取CSDN的C币,须要写篇博客. 4.干脆将调试Socket的项目发出来跟网友分享. 闲话休提,直接上代码,首先是字符串的定义: <? xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name&

(转载)Android显示原理简介

Android应用程序显示的过程:Android应用程序调用SurfaceFlinger服务把经过测量.布局和绘制后的Surface渲染到显示屏幕上. 名词解释 SurfaceFlinger:Android系统服务,负责管理Android系统的帧缓冲区,即显示屏幕. Surface:Android应用的每个窗口对应一个画布(Canvas),即Surface,可以理解为Android应用程序的一个窗口. Android应用程序的显示过程包含了两个部分(应用侧绘制.系统侧渲染).两个机制(进程间通讯