|
BroadcastGroup是数据广播组标示符(波段),
//ClientPort是数据广播目标端口(频率)。
packet=newDatagramPacket(b,b.length,BroadcastGroup,ClientPort);
//发送数据包
Sender.send(packet);
}catch(Exceptione){}
}
//数据接收方法
publicStringReceiveData()
{
byte[]b=newbyte[1024];
//构造一个空的数据包
DatagramPacketpacket=newDatagramPacket(b,1024);
StringInMsg;
try
{
//接收数据
Receiver.receive(packet);
}catch(IOExceptione){}
//丛数据包中获得接收到的数据
b=packet.getData();
InMsg=newString(b);
returnInMsg;
}
数据接收线程Receiver.java的任务是接收广播数据并更新图形用户界面。该类的构造函数包括两个参数,参数listener指定用来接收数据的Broadcast对象,参数display则指定用来显示会议内容的TextArea对象。在其运行方法run中,循环调用Broadcast对象的数据接收方法ReceiveData接收广播数据,并且利用TextArea对象的append方法将新接收到的内容显示到图形用户界面上。
publicclassReceiverextendsThread
{
BroadcastListener;
TextAreaDisplay;
StringInMsg;
//构造方法
publicReceiver(Broadcastlistener,TextAreadisplay)
{
//Listener是一个数据发送与接收对象,用来接收数据。
Listener=listener;
/Display是一个TextArea对象,用来显示会议内容。
Display=display;
}
//运行方法
publicvoidrun()
{
while(true)
{
//接收广播数据
InMsg=Listener.ReceiveData();
//更新图形用户界面
Display.append(InMsg);
Display.append("\n");
}
}
}
图形用户界面chat.java是基于Java抽象窗口工具包AWT构建的。该界面包括一个用来显示会议内容TextArea,一个用来接收用户输入的TextField,以及一个数据发送命令按钮。在Chat的构造方法中,我们首先创建图形界面,构造一个数据发送与接收对象和一个数据接收线程,然后启动该线程开始接收会议信息。在这个方法中,我们还利用InetAddress.getLocalHost()方法来获得用户的机器名,这个标示符被用来作为用户在网络会议中的用户名。
//构造方法
publicChat()
{
//创建图形界面
add(CreateGui());
//....
//其它操作
//....
//构造一个数据发送与接收对象
Device=newBroadcast();
//构造一个数据接收线程
ReceiverRecv=newReceiver(Device,InMsg);
Recv.start();
}
程序测试
利用JDK1.3编译以上所有源代码:
javac*.java
启动网络会议程序:
javaChat
本示例程序在一个包括Windows98,Windows2000,RedHatLinux6.1/7.0,MacOS,SunSolaris等多种操作系统的局域网络中通过测试。
结论
本文介绍了网络通讯中通用的传输控制协议(TCP)和用户数据包协议(UDP),并且利用Java语言设计了一个简单的基于UDP数据广播的局域网络会议程序,展示了在Java语言中进行UDP数据发送和接收的一般步骤。本示例程序说明利用UDP数据广播能够轻易实现局域网络会议的一般功能。由于Java语言卓越的跨平台特性,一个基于Java的局域网络会议系统够不加修改的运行在一系列不同平台上。
|
|