UDP数据广播的Java设计流程


UDP协议是一个非常实用的协议。但是它也有着一个不好的缺点,就是不安全。但是,对于一些数据的处理,它还是非常优秀的。那么我们就来讨论一下UDP数据广播的相关设计内容吧。本文介绍了网络通讯中通用的传输控制协议(TCP)和用户数据包协议(UDP),并且利用Java语言设计了一个简单的基于UDP数据广播的局域网络会议程序,展示了 在Java语言中进行UDP数据发送和接收的一般步骤。由于Java语言卓越的跨平台特性,本系统能够不加修改的运行在Windows, Linux, Mac OS等一系列不同平台上。

随着网络技术的普及,网络会议在公司、企业和单位中的应用也越来越广。一个网络会议系统通常包括一个服务器程序和一个客户端程序。其中服务器端负责进行用户管理、信息交互以及表决统计;客户端则实现收听发言,公开发言,私下讨论、投票表决等功能。在一个网络会议系统的设计和实现中,通常涉及到图形用户界面设计,TCP/IP连接,UDP数据广播,多线程等一系列技术。本文通过一个简单示例程序,展示了在Java语言中进行UDP数据发送和接收的一般步骤以及UDP数据 广播在局域网络会议系统中的作用。

TCP(Transmission Control Protocol,传输控制协议) 是一种基于连接的通讯协议。当两台计算机之间需要进行可靠的数据传输时,它们通过网络建立起一个稳定的连接,这种连接通常也被称为数据链。与电话网络相类似,这种数据链是点对点的,通讯的双方则通过这条数据链来回传输数据。在这条稳定的数据链的基础上,TCP协议通过信息校验能够保证接收方所接收到的数据和发送方所发送的数据在内容和顺序上是完全一致的,从而实现了数据的可靠传输。

UDP(User Datagram Protocol,用户数据包协议)与TCP协议之间的不同在于 UDP不是一种基于稳定连接的通讯协议。UDP协议将独立的数据包从一台计算机传输到另外一台计算机,但是并不保证接受方能够接收到该数据包,也不保证接收方所接收到的数据和发送方所发送的数据在内容和顺序上是完全一致的。因此,UDP协议更类似于普通邮政服务,寄信人不能够保证所寄出去的信能够被收信人及时收到,后发出的信也许会比先发出的信更早到达。 对于很多应用程序来说,在互相通讯的两台计算机之间保证一个可靠与稳定的数据链是至关重要的。在这种情况下,就应该首先考虑使用TCP协议在凉台计算机 之间建立起TCP/IP连接。在HTTP (Hyper-Text Transfer Protocol,超级文本传输 协议)、FTP (File Transfer Protocol,文件传输协议)以及TELNET 应用程序中,均要求在通讯的双方之间建立起稳定可靠的数据链,因此它们都使用了TCP协议来 进行数据传输。

在TCP协议中,发送方和接收方必须交换额外的信息以保证接收方已经接收到所发送的数据包并且所接收到的数据和发送方所发送的数据在内容和顺序上是完全一致的。这些额外的信息交换提高了数据传输的可靠度,但是也给网络带来了额外的负担,导致数据交换的延迟,从而降低了整个网络的数据交换能力。对于某些对实时性要求较高的应用程序来说,这样的延迟有可能是不可接受的。例如一个毫秒级的时钟服务器按照一定的频率向客户机提供当时的时间数据,如果这些时间数据在传输过程中受到了较大的延迟,这些过时的时间数据是完全没有意义的,即使客户机准确无误的接收到了这些数据。相反,如果客户机所接收到的每一个数据包都是实时的,那么即使客户机错过了一两个数据包也是可以接受的,因为他总是可以根据后面所接收到的数据包来对自己进行校正。因此,对于对实时性要求比较高但是对传输可靠度要求比较低的应用程序来说,UDP协议显然是一个合适的选择。

在通用的以太网(Ehternet)构架下,计算机于计算机之间的数据交换都是通过交换机来完成的。如果一份数据需要被传送给多个接收者,在使用TCP/IP连接的情况下,数据发送者需要向交换机发送N 个同样的拷贝,而交换机则负责将这N 个拷 贝分发给所有的接收者;在使用UDP数据广播的情况下,数据发送者只需要向交换机发送一个拷贝,交换机负责将这个信息制作N 个拷贝发送给所有的机器。在这种情况下,使用TCP/IP连接会大大的增加网络的负担。在一个普通局域网络中,可以认为由于网络状况较差而造成数据丢失的可能性比较小,而利用UDP数据广播进行 数据交换能够大幅度减轻网络的负担,因此设计一个基于UDP数据广播的局域网络 会议系统式完全可行的。

通常来说,一台计算机只有一个物理界面与网络相连接,所有的应用程序均通过该物理界面从网络接收数据或者将数据发送到网络。由于一个网络上同时存在多台计算机,并且一台计算机上有可能同时存在多个应用程序需要与网络进行数据交换,我们通常使用IP和端口号来识别需要进行数据交换的计算机和应用程序。每台计算机由一个32位的IP地址来识别,在一个网络中,每台计算机的IP地址都是唯一的,因此应用程序能够根据IP地址来将数据发送到正确的计算机。每个需要与网络进行数据交换的应用程序均被系统分配一个16位的端口号,系统根据这个端口号将从网络接收到的数据转发给相对应的应用程序。端口号的范围是从0 到65535 ,其 中从0 到1023被系统所保留,主要是用来提供HTTP, FTP 以及TELNET等系统服务,因此用户自己的应用程序不应该试图去使用小于1023的端口。

Java语言的一个显著优点就是它从语言的高度上提供了对网络的支持,使得程序员能够很容易的构建基于网络的应用程序。在Java 1.3版的标准类库java.net中 提供了5 个接口以及21个Java类,在这些接口和类的基础上,程序员能够轻易的实现几乎是所有的常见网络应用。例如,ServerSocket能够用来构建基于TCP/IP的服务器程序,Socket能够用来构建基于TCP/IP的客户端程序,而DatagramPacket以及 DatagramSocket能够用来构建基于UDP的数据广播程序。在java.net中的其他Java 库能够被用来实现域名解析、身份认证、安全许可等一系列功能。由于这些Java库的功能和具体用法等内容已经超出了本文的讨论范围,感兴趣的读者可以进一步参考Java的文档以及Sun 公司的Java Tutorial等资料。

这个简单的程序包括如下三个模块:

数据广播与接收模块-- Broadcast.java

数据接收线程 -- Receiver.java

图形用户界面 -- Chat.java
 
转载地址:http://www.voipchina.cn/technology/2004-03-24/36859.shtml

相关内容

    暂无相关文章