文档介绍:实验报告
学 部:理工学部
课程名称:软件工程工具
实验项目:聊天系统
专业班级:
姓 名:
学 号:
实验地点:B3403
指导教师: 杨柳 成 绩:
1实验目的
解决工作和生活中的信息交流不便的弊端。
掌握基于Socket的聊天程序的设计方法。
使用C/S构架,对网络编程有一定的了解。
2实验要求
使用Socket异步套接字进行通信,实现点对点发送消息的功能。
3实验内容
3. 1系统概述
为了解决工作和生活中信息交流不变的弊端,设计和实现一个 基于C/S结构的聊天系统。本系统使用Socket异步套接字进行通 信,实现点对点发送消息的功能。该系统包括服务器端和客户端, 服务器端的主要功能是使用Socket监听本机的端口,如果有连接 请求则创建Socket连接,而客户端在使用时需要对服务器的端口 发出请求,如果服务器存在,则建立连接,实现服务器端和客服端 之间的通信。
3. 2系统分析与设计
使用前首先建立Socket连接。
服务器端与客户端之间的信息发送是该系统最基本的功能。
在C/S模式中,服务器与客户端是相互依赖的。
服务器端与客户端的聊天信息在界面的显示应按照用户的要
求进行格式处理,这样更易于用户查看。
3. 3系统实现与测试
系统用例图:
系统时序图:
发送消息
结束消息
Server, java
单击启动按钮事件
若服务器已启动则提示错误。若正常,启动服务器。
public void serverStart (int max, int port) throws V java. net. BindException ;
当端口号被占用则提示错误信息,若没有错误,则进行以下代码,启 动服务器。
clients = new ArrayList<ClientThread>();
serverSocket = new ServerSocket(port);
serverThread = new ServerThread(serverSocket, max);
();
is Start = true;
单击停止按钮
停止服务器,若服务器未曾启动或停止失败则报错
关闭服务器的方法public void closeServer ()
停止服务器线程,并给所有在线用户发送关闭命令,释放资源,停止 此条为客户端服务的线程,关闭服务器端连接清空用户列表
群发服务器消息
public void sendServerMessage(String message) {
for (int i = () - 1; i〉= 0; i—) {
①.getWriter().println("服务器:"+ message + "(多人发送)”); clients. get(i). getWriter() .flushQ;
}
}
服务器线程
class ServerThread extends Thread {}
内含构造方法和run方法
public void run() {
while (true) {//
try {Socket socket = ();
服务器不停的等待客户端的链接。如果已达人数上限,提示“服务器
在线人数已达上限,请稍后尝试连接”,并释放资源
若符合要求,则开启对此客户端服务的线程
ClientThread client = new ClientThread(socket);
client. start();
clients. add(client);
listModel. addElement(client. getU ser() .getN ame());
(().getName()+().getIp()
+ "上线!\r\n");
为一个客户端服务的线程
class ClientThread extends Thread {
客户端线程的构造方法接收客户端的基本用户信息,反馈连接成功信 息,反馈当前在线用户信息向所有在线用户发送该用户上线命令 run方法
不断接收客户端的消息,进行处理。
下线命令断开连接释放资源,向所有在线用户发送该用户的下线命令 更新在线列表,删除此条客户端服务线程