- 浏览: 302534 次
- 性别:
- 来自: 广州
文章分类
随着网络技术的普及,网络会议在公司、企业和单位中的应用也越来越广。一 个网络会议系统通常包括一个服务器程序和一个客户端程序。其中服务器端负责进 行用户管理、信息交互以及表决统计;客户端则实现收听发言,公开发言,私下讨 论、投票表决等功能。在一个网络会议系统的设计和实现中,通常涉及到图形用户 界面设计,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
|
|
数据广播与接收模块Broadcast.java是本示例程序的核心部分。该类包括一个 构造方法,一个数据发送方法和一个数据接收方法。为了使这个类能够被更加广泛 的应用到其它应用程序中,作者又添加了一个端口配置方法。
在构造方法中,我们首先利用InetAddress 定义一个数据广播组,同时构造一 个用于发送数据的DatagramSocket与一个用于接收数据的MulticastSocket。 在这 里我们使用230.0.0.1 来作为数据广播组的标示符,虽然这个标示符与IP地址的格 式相同,但是它并不表示Internet上的一台机器。此外,我们在端口配置方法中分 别指定1235端口和1236端口位数据发送和数据接收端口。如果把一个UDP 数据广播 系统比喻成无线电广播系统的话,数据广播标示符可以被认为是波段,而数据接收 端口可以被认为是频率。收音机用户必须把收音机调整到相应的波段和频率才能够 接收到电台信号,我们的UDP 数据接收程序也必须加入相对应的数据广播组并且使 用正确的数据接收端口才能够正确的接收到UDP 广播数据。在构造方法中,我们利 用MulticastSocket 的构造函数指定数据接收端口(频率),并利用其joinGroup 方 法指定数据广播组(波段)。
public Broadcast() { GetBroadcastPorts(); try { // 构造数据广播组标示符 (波段) BroadcastGroup = InetAddress.getByName("230.0.0.1"); // 构造数据发送端口 Sender = new DatagramSocket(ServerPort); // 构造数据接收端口 (频率) Receiver = new MulticastSocket(ClientPort); // 指定数据接收端口的数据广播组 (波段) Receiver.joinGroup(BroadcastGroup); } catch (Exception e) {} } |
在数据发送方法中,我们基于用户所提供的数据以及数据广播目标端口(频率) 构造一个DatagramPacket数据包,然后利用发送数据的DatagramSocket的send方法 将该数据包发送到局域网。与此相反,在数据接收方法中,我们首先构造一个空的 DatagramPacket数据包,然后利用接收数据的MulticastSocket的receive方法填充 该数据包中的内容。为了避免由于数据包大小不同所造成的数据丢失等麻烦,我们 特地将两个数据包的大小设置成一样的。
// 数据发送方法 public void SendData(String Msg) { byte[] b = new byte[1024]; DatagramPacket packet; try { // 字节序列b 包括需要发送的数据 b = Msg.getBytes(); // 构造一个数据包,BroadcastGroup是数据广播组标示符(波段), // ClientPort是数据广播目标端口(频率)。 packet = new DatagramPacket(b, b.length, BroadcastGroup, ClientPort); // 发送数据包 Sender.send(packet); } catch (Exception e) {} } // 数据接收方法 public String ReceiveData() { byte[] b = new byte[1024]; // 构造一个空的数据包 DatagramPacket packet = new DatagramPacket(b, 1024); String InMsg; try { // 接收数据 Receiver.receive(packet); } catch (IOException e) {} // 丛数据包中获得接收到的数据 b = packet.getData(); InMsg = new String(b); return InMsg; } |
数据接收线程Receiver.java的任务是接收广播数据并更新图形用户界面。该类 的构造函数包括两个参数,参数listener指定用来接收数据的Broadcast对象,参数 display则指定用来显示会议内容的TextArea对象。在其运行方法run 中,循环调用 Broadcast对象的数据接收方法ReceiveData 接收广播数据,并且利用TextArea对象 的append方法将新接收到的内容显示到图形用户界面上。
public class Receiver extends Thread { Broadcast Listener; TextArea Display; String InMsg; // 构造方法 public Receiver(Broadcast listener, TextArea display ) { // Listener 是一个数据发送与接收对象,用来接收数据。 Listener = listener; / Display是一个TextArea对象,用来显示会议内容。 Display = display; } // 运行方法 public void run() { while(true) { // 接收广播数据 InMsg = Listener.ReceiveData(); // 更新图形用户界面 Display.append(InMsg); Display.append("\n"); } } } |
图形用户界面chat.java是基于Java抽象窗口工具包AWT构建的。该界面包括一个 用来显示会议内容TextArea,一个用来接收用户输入的TextField ,以及一个数据发 送命令按钮。在Chat的构造方法中,我们首先创建图形界面,构造一个数据发送与接 收对象和一个数据接收线程,然后启动该线程开始接收会议信息。在这个方法中,我 们还利用InetAddress.getLocalHost()方法来获得用户的机器名,这个标示符被用来 作为用户在网络会议中的用户名。
// 构造方法 public Chat() { // 创建图形界面 add(CreateGui()); // .... // 其它操作 // .... // 构造一个数据发送与接收对象 Device = new Broadcast(); // 构造一个数据接收线程 Receiver Recv = new Receiver(Device, InMsg); Recv.start(); } |
发表评论
-
java IP地址转换
2013-03-28 09:05 1052/**将给定的字节数组转换成IPV4的十进制分段表示格式的ip ... -
ScreenCapture
2012-08-02 11:59 1065import java.awt.Rectangle; impo ... -
UdpSpeedTest
2012-06-04 18:26 1024import java.net.DatagramPacket ... -
PieChart3DDemo3.java
2012-04-24 13:41 1199import java.awt.BorderLayout ... -
java modbus
2012-04-06 13:54 1290modbus -
16款Java图表组件
2012-04-06 13:50 2508开源Java图表组件 1. JFreeChar ... -
java md5
2012-02-17 14:29 845import java.security.MessageDig ... -
FreeModbus
2012-02-14 11:15 899http://freemodbus.berlios.de/ap ... -
java 获取当前日期与时间
2012-01-19 16:52 1004time = new SimpleDateFormat(&q ... -
java string sort
2012-01-19 16:46 941Arrays.sort(filelist, new Co ... -
java run dos command
2012-01-19 16:44 771Runtime.getRuntime().exec(" ... -
eclipse plugs
2012-01-17 16:47 802http://checkthread.org/eclipse- ... -
java
2012-01-12 17:18 1004BufferedWriter out = new Buf ... -
Jpcap
2012-01-04 19:36 1033Jpcap is a Java library for ... -
java 获取网卡信息
2011-12-21 15:25 1225public static void main(Stri ... -
java 多网卡绑定例程
2011-12-21 15:01 1657单播: DatagramSocket s = n ... -
java multicast demo
2011-12-20 08:46 892import java.net.DatagramPack ... -
JavaService把java程序发布为windows服务
2011-12-09 14:45 1045http://forge.ow2.org/projects/j ... -
chilkatsoft
2011-11-30 17:23 1006http://www.chilkatsoft.com/ -
csv
2011-11-30 16:40 1002Java CSV is a small fast open s ...
相关推荐
### 基于UDP数据广播的局域网络会议程序开发知识点总结 #### 一、引言 随着互联网技术的发展及企业远程协作需求的增长,网络会议系统成为了一个热门的研究领域。本文档详细介绍了一种基于用户数据报协议(UDP)的...
在本项目中,"基于UDP网络广播(qt4)"实现了一个使用C语言编写的程序,它运行在qt4.3.0这个版本的Qt平台上。Qt是一个流行的跨平台应用程序开发框架,支持多种操作系统,包括Windows、Linux、Mac OS等。 UDP,全称...
在UDP组播中,一个发送者可以向多个接收者同时广播数据,这对于需要同时传递信息给大量用户的网络会议系统来说,是非常理想的通信方式。组播地址范围通常在224.0.0.0到239.255.255.255之间,通过加入特定的组播组,...
【基于UDP的网络聊天程序客户端程序】 UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的传输层协议,相比TCP(Transmission Control Protocol,传输控制协议),UDP在速度和延迟方面具有...
在基于UDP的聊天程序中,通信双方并不建立连接,而是直接发送数据报。每个数据报包含目标IP地址和端口号,因此可以发送到网络上的任何设备。这种特性使得UDP非常适合实时应用,如在线视频、语音通话和多人在线游戏,...
基于QT的UDP网络广播程序源码论文任务书毕业设计ppt.zip
【Qt UDP网络广播】是基于Qt框架实现的一种网络通信方式,主要利用了用户数据报协议(User Datagram Protocol,简称UDP)进行数据传输。UDP是一种无连接的、不可靠的传输协议,适合于实时数据传输或者对数据完整性...
在MATLAB中实现UDP广播通信是一项实用的技能,特别是在进行分布式系统开发或者网络测试时。UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了简单高效的数据传输方式,适用于实时数据传输或对丢包不...
基于Java的局域网络会议系统利用UDP数据广播的优势,实现了高效的实时通信。通过深入理解TCP与UDP的特点,以及Java网络编程库的运用,开发者可以构建出既满足实时性又具备成本效益的网络会议解决方案。这种系统不仅...
在Linux环境下,构建基于UDP(用户数据报协议)的广播服务器和客户端是一项常见的网络编程任务。UDP是一种无连接的传输层协议,它不保证数据的可靠传输,但因其高效、简单而广泛应用于需要实时性或者容错能力较高的...
【标题】: "VC6的基于UDP的局域网广播" 涉及的主要知识点包括UDP协议、局域网广播技术以及使用Visual C++ 6.0(VC6)进行程序开发。 首先,UDP(User Datagram Protocol,用户数据报协议)是传输层的一种无连接协议...
计算机网络课程设计报告的核心主题是基于UDP协议的聊天程序开发,该程序旨在加深对网络编程的理解,特别是使用Visual C++和面向对象编程方法。UDP,即用户数据报协议,是TCP/IP协议栈中的一个无连接协议,位于传输层...
在IT行业中,网络通信是应用程序开发的一个重要领域,而UDP(User Datagram Protocol)是一种无连接的、不可靠的传输协议,常用于实时数据传输或对延迟敏感的应用场景。本示例是基于Delphi编程环境实现的UDP广播和单...
【基于UDP的广播系统中应用层通信协议的设计与实现】 在现代信息技术的推动下,多媒体教学已经成为高等教育的重要组成部分。为了高效地传递多媒体信息,如幻灯片、图像、动画、音频和视频,以及同步控制指令,开发...
python+基于UDP的网络五子棋python+基于UDP的网络五子棋python+基于UDP的网络五子棋python+基于UDP的网络五子棋python+基于UDP的网络五子棋python+基于UDP的网络五子棋python+基于UDP的网络五子棋python+基于UDP的...
标题 "基于arp和udp广播的局域网对话工具" 涉及到的是网络通信中的基本概念和技术,主要集中在ARP(地址解析协议)和UDP(用户数据报协议)上,这两种协议在局域网通信中扮演着关键角色。下面将详细讲解这两个知识点...
本文主要探讨的是基于UDP协议的Socket网络编程模式的实现,即如何利用UDP协议的特点来构建高效的网络应用程序。 #### UDP协议简介 用户数据报协议(UDP)是互联网协议簇中的一个无连接的传输层协议,提供面向事务...
- 确保网络设置允许UDP广播,否则可能无法接收到广播数据。 - 如果在局域网内进行广播,发送的数据可能会被路由器丢弃,除非路由器配置了允许UDP广播通过。 - 由于UDP的不可靠性,数据包可能会丢失,需要在应用层...
基于win下的c语言UDP实现广播技术
在计算机网络课程设计中,基于UDP(User Datagram Protocol,用户数据报协议)的聊天程序是一个常见的项目,它可以帮助学生深入理解网络通信的基本原理和UDP协议的特点。UDP是传输层的一个无连接、不可靠的协议,与...