从零开始学Java 第24章 网络聊天室

第24章  网络聊天室
在网络编程一章中,介绍过一个简单的聊天室程序,其功能比较有限,并且是界面也不友好。本章将会完整的介绍一个相对来说完整的,界面友好的聊天室。本章的聊天室程序是的客户端是以Applet形式实现的,更方便Java嵌入在网页中使用的原意。
24.1  服务器端
在聊天室服务器端需要完成的任务有以下几点:
监听用户的连接请求
储存连接用户的信息
转发用户发送的信息
处理用户的退出的信息
24.1.1  服务器
服务器端首先需要建立一个ServerSocket,然后监听用户的连接请求。当监听到用户请求时,建立相应的Socket,通过该Socket与用户进行信息的交互。
24.1.2  服务器端线程对象
服务器端监听用户的请求,得到一个Socket,把它封装到一个内部类Client中。Client类是一个线程类,建立该类的对象后,启动线程,就可以不间断的进行客户端与服务器的交互。
24.1.3  消息解析
在Client类的run方法中,该线程需要不停的读取用户的输入。获得输入后需要对输入按格式进行解析注意这端代码:
StringTokenizer st=new StringTokenizer(line,":");  //分解字符串
String keyword=st.nextToken();
StringTokenizer是一个字符串解析类。通过该类可以解析用户的输入信息,通过该信息来区别传递的是聊天信息还是退出信息。构造StringTokenizer类的时候,第一个参数是要解析的字符串,而第二个参数则是字符串的分隔符。
24.2  客户端
客户端是通过Applet的形式实现的。该类使用户可以进行连接服务器,可以发送信息,并能结束其它用户发送的信息。客户端的重点在于Applet的事件处理,发送接受消息以及窗体的显示。
24.2.1  事件处理
在Applet中,有可能触发3个事件:连接服务器、断开连接、发送消息。对这三个事件都应该有相应的方法进行处理。
24.2.2  输入输出流
前面说到了Listen类,该类主要负责与服务器端的交互。接受用户的输入,将输入按格式组织起来,发送给服务器端。另一方面要接受服务器的消息,按格式解析后,显示在屏幕上。
24.2.3  Applet窗体以及完整代码
ChatClient类主要负责客户端窗体的显示,它需要继承Applet类。添加相应的组建在界面上,并监听用户触发的事件。根据用户触发的事件进行相应的操作。
24.3  小结
本章的主要内容是是实现了一个客户端为Applet实现的聊天室小程序。通过该程序用户可以体会下Applet编程以及网络编程,另外也可以用到集合框架的知识,在存储用户对象的时候使用集合框架来实现。用户可以仔细体会整个程序的编写过程。

原文地址:https://www.cnblogs.com/yoogoo/p/2467292.html