别便利。在Internet时代,Java热遍及全球,
学习和使用Java的人越来越多。在Java中进行网络编程是相对容易的,因为J2SE中的java.net包已经对各种
通信协议很好地进行了封装。文中用Java来实现基于UDP的聊天程序,限于篇幅,只实现了基本的聊天功能。
为了方便用户的使用,把程序分成两个类,主类为Chat,
里面有主函数main,以便应用程序的运行;另一个类FrameMain,扩展了窗体类,方便用户输入及显示消息。主函数main中实例化了主窗体FrameMain。
接下来来看具体代码,为描述程序的方便,分块地来研
究,先看代码片断1:
privateprivate
首先,要介绍Java中封装UDP编程的类——Datagram—
Socket,这是用来发送和接收数据报的套接字。在程序启动后,可以在构造函数中提供端口参数用以在本地主机上绑定
DatagramPacketrecvPacket;DamgramPacketsendPacket;
,,用来接收的数据报fl用来发送的数据报,,得到主机的IP地址,,本地监听端r丁号//UDP套接字∥监听子线程
privateInetAddressIP=null;
privatefinalintmyPon=9000;private
一个端口,以便接收和发送数据报。DatagramSocket类的send
方法可以将参数对象的数据报发送到目的主机的目的端口;receive方法可以接收网络上其他主机发送过来的数据报并封
DatagramSocketUDPSocket=null;
privateThread
recvThread;
以上对象都是程序中要使用的主要对象,除了本地监听端口设了9000的值,其他对象都是空对象。recvPaeket对象将在套接字调用完receive方法后实例化,而sendPacket对象和IP对象将在触发发送数据报的代码时创建。UDPSocket对象是核
装成对象。
其次,要介绍的就是承载数据报的对象DatagramPacket,这个对象封装了UDP的数据报数据,通过重载构造函数,提供不同的参数,可以把DatagramPaeket构造成发送数据或接收数据的数据报对象。发送数据的对象将作为DatagramSocket类
心,将在一个单独的初始化方法iblnitOBuilder开发工具默认
生成的方法)中对这个对象进行创建,并且在窗体构造函数中
的send方法的参数;接收数据的对象将作为DatagramSocket
本文收稿日期:2009--4--30
调用jblmt方法。请看以下jblnit方法的代码片断2:
privatevoid
jbInit0
throws
Exception
万方数据
一3l一
电脑编程技巧与维护
{
UDPSocket=11ewrecvThread=newrecvThread.start
方m或聊天信息”);
DatagramSocket(myPort);Thread(this):IetIlm:
l
try
0:
}
{
IP=InetAddress.getByName(TolP.getText()):byte【】sendByte=message.getBytes
sendPacket;new
以卜代码在实例化UDPSocket对象时以9000的端13号作
为监听端口。UDP套接字通过调用receive方法监听数据报并实例化recvPacket,但是由于该方法在接收到数据报前一直阻塞,所以为了与主界面功能互不影响,将这个会阻塞的方法放到一个单独的线程中,这样。主界面的发送和显示功能与接收数据报的功能可以认为是同时在进行,互不干扰。请看以下代码片断3: