移动编程技术第七讲.ppt
《移动编程技术第七讲.ppt》由会员分享,可在线阅读,更多相关《移动编程技术第七讲.ppt(23页珍藏版)》请在三一办公上搜索。
1、移动编程技术(七),哈尔滨工程大学软件学院,目 录,UDP协议概述 UDP协议的应用 基于UDP的DatagramSocket 基于UDP的DatagramPacket TCP与UDP对比 Android蓝牙通信,UDP协议,TCP协议面向连接的可靠性是有代价的,这种代价就是传输速度的降低。由于建立和销毁连接会话费较长的时间,如果通信双方实际上要传输的数据很小,那么建立和销毁TCP连接的代价就相对较高。UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是无连接的协议,即在正式通信前不必与对方事先建立连接,不必知晓对方状态就直接向对方发送数据。正由于UDP无
2、连接的特点,使其比TCP具有更快的传输速度,但可靠性却无法保证。UDP发送的数据单元为UDP数据报(简称报文),协议无法保证传输中的报文一定到达目的地,也无法保证各个报文按发送的顺序到达目的地。,UDP协议的特性,(1)UDP是一个无连接协议,传输数据之前发送端和接收端不建立连接,当需要发送数据时就直接去获取来自应用程序的数据,并以一个个数据报的形式尽可能快的把数据发送到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个数据报放在队列中,应用程序每次从队列中读一个数据报。(2)由于传输数据不建立连接,因此也就不需要维护连接
3、状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。(3)UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。(4)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表。(5)UDP是面向报文的。发送端每次发送一个报文,接收时,每次读取一个报文,报文和报文是不会合并的,如果接收端的缓冲区小于报文长度,则多出的部分会被丢弃。因此,应用程序需要选择合适的报文大小。,UDP协议的应用,既然UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?实际上,在某些情况下UDP协议非常有用。因为UDP具有TCP协议所难以达到的速
4、度优势。虽然TCP协议中定义了各种可靠保障机制,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。而UDP协议由于去除了信息可靠传递机制,将确认和排序等功能移交给上层应用来完成,极大降低了数据收发的时间,使速度得到了保证。目前,包括视频电话会议系统、即时通信系统(如QQ)在内的许多应用都证明了UDP协议的存在价值。因为相对于可靠性来说,这些应用更加注重实际性能,所以为了获得更好的使用效果(如更高的画面帧刷新速率,更快的消息送达)往往可以牺牲一定的可靠性。,TCP协议与UDP协议的区别,TCP协议与UDP协议的区别,TCP协议与UDP协议的选择,当数据传输的性能必须让位于数据
5、传输的完整性、可控制性和可靠 性时,TCP协议是当然的选择。当强调传输性能而不是传输的完整性时,UDP是最好的选择。在数据传输时间很短,以至于此前的连接过程成为整个流量主体的 情况下,UDP也是一个好的选择(如DNS交换)。这就是UDP和TCP两种协议的权衡之处,要根据不同的环境和特点,使得两种传输协议在网络通信中发挥各自重要的作用。,DatagramSocket,在Java中,DatagramSocket类负责接收和发送UDP数据报,每一个DatagramSocket与一个本地地址(包括本地主机的IP地址和本地UDP端口)绑定,在此端口监听发送过来的数据报。在客户端程序中,一般由操作系统为D
6、atagramSocket分配本地端口,这种端口也称为匿名端口;在服务器程序中,一般有程序显示的为DatagramSocket指定本地端口。(UDP与TCP可以共用同一端口)每个DatagramSocket可以把UDP数据报发送给任意一个远程的DatagramSocket,也可以接收来自任意一个远程DatagramSocket的UDP数据报。由于UDP协议无连接的特性,客户端的DatagramSocket与服务器端的DatagramSocket不存在一一对应关系,两者无需建立连接,就能交换数据报。,DatagramSocket,DatagramSocket类的构造方法:,DatagramSoc
7、ket()DatagramSocket(int port)DatagramSocket(int port,InetAddress addr)DatagramSocket(SocketAddress saddr),第一个不带参数的构造方法使DatagramSocket对象与匿名端口绑定(由操作系统分配可用端口)其余方法需要显示的指定本地端口构造方法三、四用于一个主机有多个IP地址的场合,明确指定DatagramSocket对象所绑定的IP地址,DatagramSocket,接收和发送数据报:,send(DatagramPacket dp)receive(DatagramPacket dp),se
8、nd()方法用于发送一个数据报,由于UDP提供不可靠传输,如果数据报没有到达目的地,send()方法也不会抛出任何异常,因此发送方无法知道数据报是否被对方接收,除非通过应用层协议通知重发。如果发送的数据报超过了底层网络所支持的数据报大小,可能会抛出SocketException:The message islarger than the maximum supported by underlying transport.receive()方法用于接收一个数据报,如果网络上没有数据报,执行该方法的线程会进程阻塞状态,直到收到数据报为止。,DatagramSocket,连接管理:,void con
9、nect(InetAddress host,int port)void disconnect()int getPort()InetAddress getInetAddress();SocketAddress getRemoteSocketAddress(),如果一个DatagramSocket只希望与一个固定的远程DatagramSocket通信,可以使用connect()方法建立“连接”。connect()方法实际上不建立TCP意义上的连接,但它能限制当前DatagramSocket只向该远程DatagramSocket发送数据报,如果当前DatagramSocket试图向其它主机或UDP端
10、口发送数据报,当执行send()方法时会抛出IllegalArgumentException,来自指定的远程DatagramSocket以外的主机或UDP端口的数据报将全部被丢弃,程序不会得到任何通知,也不会抛出任何异常。,DatagramSocket,连接管理:,void connect(InetAddress host,int port)void disconnect()int getPort()InetAddress getInetAddress();SocketAddress getRemoteSocketAddress(),当调用disconnect()方法后,则解除前述“连接关系”
11、,DatagramSocket就可以再次对其它任何主机和UDP端口收发数据报。仅当DatagramSocket已经建立“连接”时,后三个方法才有效,可以返回远程主机的端口、IP地址。通常情况下,UDP客户端程序可以与指定的UDP服务器通信,可以将客户端DatagramSocket通过connect方法建立“连接”。UDP服务器需要与多个客户端程序通信,一般不用建立特定的“连接”。,DatagramPacket,DatagramPacket类表示数据报,它的构造方法分为两类:一类用于接收数据,一类用于发送数据。其主要区别是,用于发送数据的构造方法需要设定数据报的目的地址,用于接收数据的构造方法则
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 移动 编程 技术 第七
链接地址:https://www.31ppt.com/p-6327606.html