(4)在各个组件和容器中需要有事件处理的地方,比如关闭对话框,确定和取消等,要事先设置事件监听,和事件处理。(5)由于允许使用多个客户端,所以在各个套接字在接发信息时要用多线程,使接发信息的类继承Tread,实现多线程设计。(6)为了不使客户端和服务器端的程序代码过长,把各个类封装在不同的文件中,并都声明为公共类(public),这样可以在同一个包内访问。【开发过程】服务器端:(1)设置主窗口及显示形式。窗口名为聊天服务器端。设置菜单栏,包含服务和帮助两项。其中,服务中包含端口设置,启动服务,停止服务和退出菜单项。设置工具栏也包含端口设置,启动服务,停止服务和退出。在主窗口设置显示信息显示区域,用jscrollpane设置成可滚动显示区域,总是显示最新信息,且不可编辑。还需要有发送消息的文本编辑框和发送按钮。系统要选择发送给某个用户或者全部用户,所以还需要一个组合框。(2)添加框架的2事件监听器和事件处理器,如关闭框架。在构造函数中,初始化窗口并设置快捷键。初始时,端口设置,启动服务和退出按钮启动,而停止服务菜单项处于禁用状态。为菜单栏里各项和各个按钮添加事件侦听器和事件处理器。(3)由于停止服务和退出等操作都会重用停止服务程序块,所
2
以在主框架的程序中添3加启动服务和停止服务的函数。在事件处理器模块由java.util.EventObject.getSource()方法获取当前事件的事件源。如果事件源是启动服务,则调用启动服务函数启动服务;如果事件源是停止服务则调用停止服务函数停止服务;如果事件源是端口设置,可以新建一个类用以设置端口;如果事件源是退出则调用停止服务函数停止服务,并调用system.exit(0)退出程序;如果事件源是菜单栏中的帮助,则新建一个类用以设置帮助对话框;如果事件源是发送消息按钮,则添加一个发送消息函数,选择向所有人还是向某个人发送系统消息。(4)接着实现主框架程序中的各个子函数。1,启动服务函数时服务器端启动,则需要生成服务器端套接字serversocket。利用构造函数java.net.ServerSocket.ServerSocket(intport,intbacklog),可以设置最大的客户端用ServerSocket户数backlog。在服务器端显示区域显示服务器侦听的端口号,用来提示客户端如果要连接到此服务器端,则必须设置统一的端口号。启动服务时,端口设置和启动服务被禁用,停止服务,退出和发送消息文本框启用。同时,新建一个用以侦听用户上线和下线信息的类,在此类中显示在线用户个数。由于允许多用户,所以让这个类继承java.lang.Thread类。在启动服务函数中创建侦听用户上下线类的对象的同时,启动线程。2,关闭服务时需向所有人发送关闭服务器的消息。添加向所有
3
人发送关闭服务器消息的函数。关闭服务器端套接字。关闭各个客户端的objectinputstream,objectoutputstream和套接字。停止服务和发送消息禁用,启动服务和端口设置启用。在服务器端显示服务器已经关闭,将组合框的项目清空,显示默认的所有人项。3,发送消息函数中有发送给所有人和发送给某个用户两种操作。由javax.swing.JComboBox.getSelectedItem()返回选择发送的对象作为选择进行两种操作的哪一种操作依据。发送的信息由方法java.io.ObjectOutputStream.writeObject(Objectarg0)实现。(5)用户结点类用以保存用户信息。其中包含用户名和套接字,还有objectinputstream和objectoutputstream的对象用来保存用户读和写的信息。同时包含一个指向下一个结点的“指针”。用户链表类用以把各个用户连成一个链表,方便遍历操作。其中包含添加用户,删除用户,返回用户数,根据用户名查找用户和根据索引查找用户操作的函数。(6)端口设置对话框类中设置连接的端口号。使其继承javax.swing.JDialog,生成对话框。设置事件监听器监听保存和取消按钮,并在事件处理器中进行相应处理。在帮助类中,也使其生成对话框显示帮助信息,并4设置事件监听器监听确认按钮,且在事件处理器中进行处理。(7)由于收发消息的类要处理与多个用户互动的消息,所以使其继承java.lang.Thread实现多线程设计。如果线程有被服务器端终
4
止而且客户端套接字没有被关闭,那么5就由ObjectInputStream方法的java.io.ObjectInputStream.readObject()来读取客户端写入的信息,并显示在显示区域。由于客户端同样可以选择向所有人发送消息和向某个人发送消息,所以要用java.lang.String.equalsIgnoreCase(Stringarg0)方法验证客户端选择的是所有人还是某个人,并进行相应的操作。如果java.io.ObjectInputStream.readObject()中的信息是用户下线,则更新组合框用户
列表和在线人数,并通知其他用户此用户下线信息。客户端:(1)设置主窗口及显示形式。标题为聊天客户端。设置菜单栏,包含操作,设置和帮助三项。其中,操作中包含用户登录,用户
注册和退出菜单项;设置中包含用户设置和连接设置。设置工具栏也包含用户设置,连接设置,登录,注销和退出。在主窗口设置显示信息显示区域,用jscrollpane设置成可滚动显示区域,总是显示最新信息,且不可编辑。还需要有发送消息的文本编辑框和发送按钮。系统要选择发送给某个用户或者全部用户,所以还需要一个组合框。同时添加组合框用以选择发送消息时的表情,并添加悄悄话复选框。(2)添加框架的事件监听器和事件处理器,如关闭框架。在构造函数中,初始化窗口并设置快捷键。初始时,用