码迷,mamicode.com
首页 > 移动开发 > 详细

网络应用(二)----安卓如何使用TCP和UDP进行通信,Socket编程

时间:2015-08-03 16:11:23      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

TCP传输控制协议,是一种面向连接的,可靠的,基于字节流的传输层通信协议。

UDP用户数据报协议,是TCP/IP模型中一种面向无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

Socket通称套接字,中文意思为插座。一台服务器可能会提供很多服务,每种服务对应一个Socket(也可说成,每个Socket就是一个插座,客户若是需要哪种服务,就将插头插到相应的插座上面)。而客户的插头也是一个Socket。它是应用层与TCP/IP协议通信的中间软件抽象层,是一组接口。

Socket基本操作包括:

连接远程服务器,发送数据,接收数据,关闭连接,绑定端口,监听到达数据,在绑定的端口接受来自远程机器的连接。

---------------------------------------------------------------------------

服务器要和客户端通信,两者都要实例化一个Socket。但是服务器和客户端的Socket是不一样的,客户端可以实现连接远程服务器,发送数据,接收数据,关闭连接等。服务器还需要实现绑定端口,监听到达数据,在绑定的端口接受来自远程机器的连接。

Android在java.net里面提供了两个类:ServerSocket和Socket,前者用于实例化服务器的Socket,后者用于实例化客户端的Socket. 在连接成功后,应用程序两端都会产生一个Socket实例,操作这个实例,完成客户端到服务器所需的会话。

--------------------------------------------

Socket client=new Socket("192.168.1.23",2012);//第一个参数是目标服务器的IP地址,2012是目标服务器的端口号

注意:0~1023为系统保留,用户设定的端口号应该大于1023

-------------------------------------------

Socket类重要方法:

public InputStream getInputStream()  读出该Socket中的数据流

public OutputStream getOutputStream() 向该Socket中写入数据

public synchronized void close() 关闭Socket

---------------------------------------------------------------

ServerSocket socketserver=new ServerSocket(2012);//2012表示服务器要监听的口号

构造完ServerSocket之后,需要调用ServerSocket.accept()方法来等待客户端的请求(因为Socket都是绑定在端口上面的,所以知道是哪个客户端请求的)。 accept()方法就会返回请求这个服务项目的客户端的Socket实例,然后通过返回的这个Socket实例的方法,操作传输过来的信息。当Socket对象操作完毕之后,使用close()方法将其关闭。

ServerSocket类重要方法:

public Socket accept()  等待Socket请求,直接连接被打开,该方法返回一个刚刚打开的连接Socket对象。

public void close()   关闭该服务器Socket

-------------------------------------------

Socket一般有两种类型:TCP套接字和UDP套接字

--------------------------------------------------------------

使用TCP通信

TCP建立连接之后,通信双方都同时可以进行数据的传输;在保证可靠性上,采用超时重传和捎带确认机制;在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传;在拥塞机制上,采用慢启动算法。

技术分享

TCP服务器端工作的主要步骤如下。

步骤1 调用ServerSocket(int port)创建一个ServerSocket,并绑定到指定端口上。

步骤2 调用accept(),监听连接请求,如果客户端请求连接,则接受连接,返回通信套接字。

步骤3 调用Socket类的getOutputStream()和getInputStream()获取输出和输入流,开始网络数据的发送和接收。

步骤4 关闭通信套接字。

TCP客户端工作的主要步骤如下。

步骤1 调用Socket()创建一个流套接字,并连接到服务器端。

步骤2 调用Socket类的getOutputStream()和getInputStream()方法获取输出和输入流,开始网络数据的发送和接收。

步骤3 关闭通信套接字。

------------------------------------------------------------------

使用UDP通信

UDP有不提供数据报分组、组装和不能对数据包排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用,包括网络视频会议系统在内的众多的客户端/服务器模式的网络应用都需要使用UDP协议。UDP协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传输单位。UDP传输原理示意图如图2-6所示。

技术分享

UDP服务器端工作的主要步骤如下。

步骤1 调用DatagramSocket(int port)创建一个数据报套接字,并绑定到指定端口上。

步骤2 调用DatagramPacket(byte[]buf,int length),建立一个字节数组以接收UDP包。

步骤3 调用DatagramSocket类的receive(),接受UDP包。

步骤4 关闭数据报套接字。

UDP客户端工作的主要步骤如下。

步骤1 调用DatagramSocket()创建一个数据包套接字。

步骤2 调用DatagramPacket(byte[]buf,int offset,int length,InetAddress address,int port),建立要发送的UDP包。

步骤3 调用DatagramSocket类的send()发送UDP包。

步骤4 关闭数据报套接字。

 

网络应用(二)----安卓如何使用TCP和UDP进行通信,Socket编程

标签:

原文地址:http://www.cnblogs.com/dawn-rainy/p/4699219.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!