java网络通信技术实现基于cs模式的聊天室.docx
《java网络通信技术实现基于cs模式的聊天室.docx》由会员分享,可在线阅读,更多相关《java网络通信技术实现基于cs模式的聊天室.docx(19页珍藏版)》请在冰豆网上搜索。
java网络通信技术实现基于cs模式的聊天室
武汉科技大学城市学院
课程设计报告
课程设计名称Java课程设计
题目
采用Java网络通信技术实现基于C/S模
式的聊天室
院系
信息工程学部
专业
信息管理与信息系统
班级
1班
姓名
张峰
指导教师
于海平
题目:
采用Java网络通信技术实现基于C/S模式的聊天室
1课程设计教学条件要求eclipse/netbeans/Jbuilder
2课程设计任务
编写一个简易CS版聊天室,多个客户端可以同时发送信息,服务器端监听并显示到客户端页面。
1.要求可以实现多人同时在线聊天。
2.要求客户端和服务器端的界面采用Swing或SWT实现
3.服务器可以向多个客户进行广播通信。
3课程设计报告书主要内容
1需求分析
2总体设计
2.1设计的总体思想与算法描述
2.2模块结构图
2.3各功能模块的功能与处理流程描述
2.4界面设计
3各功能模块程序设计
按照功能模块的功能与处理流程描述给出详细的程序代码,并给出重点语句的注释.
4小结
4课程设计要求
1按时到机房签到,在指定机位上机。
遵守机房纪律。
2独立完成课程设计任务。
指导教师到机位上指导学生和分时段验收学生完成的程序。
3按时提交打印的课程设计报告书。
5课程设计参考书
[1]许文宪懂子建.Java程序设计教程与实训.北京:
北京大学出版社,2005.
[2]辛运帏.Java程序设计.北京:
清华大学出版社,2004
[3][美]Echel,B.Java编程思想(第三版).北京:
机械工业出版社,2005
撰写者:
江伟指导老师:
于海平
目录
1需求分析1
2总体设计2
2.1设计的总体思想与算法描述2
2.2模块结构图2
2.3界面设计3
2.3.1管理员界面3
2.3.2登陆界面3
2.3.3聊天界面4
2.3.4文件发送界面5
2.3.5接受提示界面5
2.3.6选择保存界面6
2.3.7传输成功提示界面6
3程序设计7
4小结22
参考文献23
1需求分析
本系统是实现c/s模式的聊天室首先要建立侦听服务,这个需求是服务器端的需求。
其次还应实现:
用户登录,包括客户端请求登录以及服务器端响应登录两个过程。
收发聊天信息,包括客户端发送聊天信息以及服务器端转发聊天信息两个过程。
收发系统信息,由服务器端发送给客户端的信息。
用户下线,包括客户端请求下线以及服务器响应请求两个过程,这个与用户登录类似,服务器关闭。
其中我还加入了文件传输功能,方便了用户文件的共享。
2总体设计
2.1设计的总体思想与算法描述
依据需求分析的结果,该系统应设计成一个可以实现多人同时在线聊天功能的聊天软件,下面从软件的整体结构设计、界面设计、变量设计等方面阐述一下系统的总体设计。
依据需求分析结果,设计应实现多人同时在线聊天,就应该分为服务端和用户端两个端口。
用户端把信息发送到服务端,而后服务端再把信息分发到各个用户端。
2.2模块结构图
图2.1模块结构图
2.3界面设计
2.3.1管理员界面
图2.2管理员界面
2.3.2登陆界面
图2.3登陆界面
2.3.3聊天界面
图2.4聊天界面
2.3.4文件发送界面
图2.5文件发送界面
2.3.5接受提示界面
图2.6接受提示界面
2.3.6选择保存界面
图2.7选择保存界面
2.3.7传输成功提示界面
图2.8传输成功提示界面
3程序设计
packagecom.ff;
importjava.io.*;
import.*;
importjava.util.*;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassStartServer{
publicstaticvoidmain(String[]args){
StartServerstartServer=newStartServer();
StartServer.ServerserverFrame=startServer.newServer();
}
classServerextendsJFrame{
privateJScrollPanejp_rec;
privateJScrollPanejp_send;
privateJScrollPanejp_list;
privateJTextAreajta_rec;
privateJTextAreajta_send;
privateJLabellbl_rec;
privateJLabellbl_edit;
privateJListjlist;
privateJButtonbtnSend;//发送消息按钮
privateJButtonbtnT;
privateDefaultListModellistModel;
privateHashMapallUserLink=newHashMap();
publicServer(){
init();
try{
ServerSocketserver_socket=newServerSocket(9999);
while(true){
Socketclient_socket=server_socket.accept();
SocketThreaddealThread=newSocketThread(
client_socket);
newThread(dealThread).start();
}
}catch(Exceptionex){
ex.printStackTrace();
}
}
publicvoidinit(){
this.setTitle("管理员平台");
this.setSize(800,400);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLocationRelativeTo(this);
Containerc=this.getContentPane();
c.setLayout(null);
jta_rec=newJTextArea("");
jta_send=newJTextArea("");
jp_rec=newJScrollPane();
jp_send=newJScrollPane();
jp_list=newJScrollPane();
lbl_rec=newJLabel("--消息记录--");
lbl_edit=newJLabel("--文本编辑--");
btnSend=newJButton("发送");
btnT=newJButton("T除成员");
listModel=newDefaultListModel();
jlist=newJList(listModel);
jlist.setBorder(BorderFactory.createTitledBorder("在线成员"));
jp_rec.getViewport().add(jta_rec);
jp_send.getViewport().add(jta_send);
jp_list.getViewport().add(jlist);
jta_rec.setLineWrap(true);
jta_send.setLineWrap(true);
jta_rec.setEditable(false);
lbl_rec.setBounds(30,10,80,20);
jp_rec.setBounds(30,30,450,100);
lbl_edit.setBounds(30,130,80,20);
jp_send.setBounds(30,150,450,100);
btnSend.setBounds(350,260,80,20);
jp_list.setBounds(500,30,120,220);
btnT.setBounds(520,260,80,20);
c.add(lbl_rec);
c.add(lbl_edit);
c.add(jp_rec);
c.add(jp_send);
c.add(btnSend);
c.add(jp_list);
c.add(btnT);
this.setVisible(true);
}
classSocketThreadextendsBaseTrans{
privatebooleanthreadON=true;
publicSocketThread(Socketclient_socket){
super(client_socket);
btnSend.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
messageEvent("code=001;msg=※※※※※※公告"+newDate().toLocaleString()+"※※※※※※※\r\n"+jta_send.getText());
jta_send.setText("");}
});
btnT.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(jlist.getSelectedValue()!
=null){
SocketThreadst=allUserLink.get(jlist.getSelectedValue().toString().trim());
allUserLink.remove(jlist.getSelectedValue().toString().trim());
st.sendMessage("code=0");
messageEvent("code=001;msg=※※※※※※公告"+newDate().toLoc