版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武 汉 科 技 大 学 城 市 学 院课 程 设 计 报 告 课程设计名称 java课程设计 题 目采用java网络通信技术实现基于c/s模式的聊天室 院 系 信息工程学部 专 业 信息管理与信息系统 班 级 1班 姓 名 张峰 指导教师 于海平 题目:采用java网络通信技术实现基于c/s模式的聊天室1 课程设计教学条件要求 eclipse/ netbeans/ jbuilder 2 课程设计任务编写一个简易cs版聊天室,多个客户端可以同时发送信息,服务器端监听并显示到客户端页面。1要求可以实现多人同时在线聊天。2要求客户端和服务器端的界面采用swing或swt实现3服务器可以向多个客户进行
2、广播通信。3 课程设计报告书主要内容1 需求分析2 总体设计 21 设计的总体思想与算法描述 22 模块结构图 23 各功能模块的功能与处理流程描述 24 界面设计3 各功能模块程序设计按照功能模块的功能与处理流程描述给出详细的程序代码,并给出重点语句的注释.4 小结4 课程设计要求1 按时到机房签到,在指定机位上机。遵守机房纪律。 2 独立完成课程设计任务。指导教师到机位上指导学生和分时段验收学生完成的程序。 3 按时提交打印的课程设计报告书。5 课程设计参考书1 许文宪 懂子建. java程序设计教程与实训. 北京:北京大学出版社,2005.2 辛运帏 .java程序设计.北京:清华大学出
3、版社, 20043 美echel,b .java编程思想(第三版).北京:机械工业出版社,2005撰写者:江伟 指导老师:于海平目 录1 需求分析12 总体设计221 设计的总体思想与算法描述222 模块结构图22. 3界面设计32.3.1 管理员界面32.3.2 登陆界面32.3.3 聊天界面42.3.4 文件发送界面52.3.5 接受提示界面52.3.6 选择保存界面62.3.7 传输成功提示界面63程序设计74 小结22参考文献2324 1 需求分析本系统是实现c/s模式的聊天室 首先要建立侦听服务,这个需求是服务器端的需求。其次还应实现:用户登录,包括客户端请求登录以及服务器端响应登录
4、两个过程。收发聊天信息,包括客户端发送聊天信息以及服务器端转发聊天信息两个过程。收发系统信息,由服务器端发送给客户端的信息。用户下线,包括客户端请求下线以及服务器响应请求两个过程,这个与用户登录类似,服务器关闭。其中我还加入了文件传输功能,方便了用户文件的共享。2 总体设计21 设计的总体思想与算法描述依据需求分析的结果,该系统应设计成一个可以实现多人同时在线聊天功能的聊天软件,下面从软件的整体结构设计、界面设计、变量设计等方面阐述一下系统的总体设计。依据需求分析结果,设计应实现多人同时在线聊天,就应该分为服务端和用户端两个端口。用户端把信息发送到服务端,而后服务端再把信息分发到各个用户端。2
5、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 程序设计package com.ff;import java.io.*;import .*;import java.util.*;import javax.swing.*;import java.awt.*;import java.awt.even
6、t.*;public class startserver public static void main(string args) startserver startserver = new startserver();startserver.server serverframe=startserver.new server(); class server extends jframe private jscrollpane jp_rec;private jscrollpane jp_send;private jscrollpane jp_list;private jtextarea jta_
7、rec;private jtextarea jta_send;private jlabel lbl_rec;private jlabel lbl_edit;private jlist jlist;private jbutton btnsend;/ 发送消息按钮private jbutton btnt;private defaultlistmodel listmodel;private hashmap alluserlink = new hashmap();public server() init();try serversocket server_socket = new serversock
8、et(9999);while (true) socket client_socket = server_socket.accept();socketthread dealthread = new socketthread(client_socket);new thread(dealthread).start(); catch (exception ex) ex.printstacktrace();public void init() this.settitle(管理员平台);this.setsize(800, 400);this.setdefaultcloseoperation(exit_on
9、_close);this.setlocationrelativeto(this);container c = this.getcontentpane();c.setlayout(null);jta_rec = new jtextarea();jta_send = new jtextarea();jp_rec = new jscrollpane();jp_send = new jscrollpane();jp_list = new jscrollpane();lbl_rec = new jlabel(-消息记录-);lbl_edit = new jlabel(-文本编辑-);btnsend =
10、new jbutton(发送);btnt = new jbutton(t除成员);listmodel=new defaultlistmodel();jlist = new jlist(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.setl
11、inewrap(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_r
12、ec);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);class socketthread extends basetrans private boolean threadon=true;public socketthread(socket client_socket) super(client_socket);btnsend.addactionlistener(new actionlistener()public void
13、 actionperformed(actionevent e) messageevent(code=001;msg=公告 +new date().tolocalestring()+rn+jta_send.gettext();jta_send.settext(););btnt.addactionlistener(new actionlistener()public void actionperformed(actionevent e) if(jlist.getselectedvalue()!=null)socketthread st=alluserlink.get(jlist.getselect
14、edvalue().tostring().trim();alluserlink.remove(jlist.getselectedvalue().tostring().trim();st.sendmessage(code=0);messageevent(code=001;msg=公告 +new date().tolocalestring()+rn+jlist.getselectedvalue()+被管理员踢了出去!);st.closelink();threadon=false;listmodel.remove(jlist.getselectedindex(););public void mess
15、ageevent(string msg) stringutil stringutil = new stringutil();stringutil.analysismessage(msg);string code = stringutil.getvaluebykey(code);if (code.equalsignorecase(000) system.out.println(进入了001);listmodel.addelement(stringutil.getvaluebykey(username);for (iterator it =alluserlink.keyset().iterator
16、(); it.hasnext();) alluserlink.get(it.next().sendmessage(code=001;msg=公告 +new date().tolocalestring()+rn+stringutil.getvaluebykey(username) +进入了聊天室,大家欢迎他(她)吧!);alluserlink.put(stringutil.getvaluebykey(username),this);jta_rec.settext(jta_rec.gettext()+rn+公告 +new date().tolocalestring()+rn+stringutil.
17、getvaluebykey(username)+进入了聊天室,大家欢迎他(她)吧!);jta_rec.setcaretposition(jta_rec.gettext().length(); else if (code.equalsignorecase(001) system.out.println(进入了001);for (iterator it =alluserlink.keyset().iterator(); it.hasnext();) alluserlink.get(it.next().sendmessage(msg);jta_rec.settext(jta_rec.gettext(
18、)+rn+stringutil.getvaluebykey(msg);jta_rec.setcaretposition(jta_rec.gettext().length(); else if (code.equalsignorecase(010) system.out.println(进入了010);this.setfilename(stringutil.getvaluebykey(filename);this.setfilelength(integer.parseint(stringutil.getvaluebykey(filesize);initfileoutputstream(./);s
19、endmessage(code=011); else if (code.equalsignorecase(012) system.out.println(进入了012);sendmessage(code=013);setsendfileflag(true); else if (code.equalsignorecase(014) system.out.println(进入了014);for (iterator it =alluserlink.keyset().iterator(); it.hasnext();) if (this != alluserlink.get(it.next() soc
20、ketthread st=alluserlink.get(it.next();st.setfilename(getfilename();st.setfilelength(getfilelength();st.sendmessage(code=015;username=+ stringutil.getvaluebykey(username)+ ;filename=+ getfilename()+ ;filesize=+ getfilelength(); else if (code.equalsignorecase(016) system.out.println(进入了016);sendfiled
21、ata(./ + this.getfilename();sendmessage(code=018); else if (code.equalsignorecase(017) for (iterator it =alluserlink.keyset().iterator(); it.hasnext();) if (this != alluserlink.get(it.next() alluserlink.get(it.next().initnet();public void run() while (threadon) receive();客户端代码package com.ff;import j
22、ava.io.*;import .*;import java.util.date;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class startclient public static void main(string args)startclient sc=new startclient();startclient.client client=sc.new client();class clientpublic client()init();public void init()trysocke
23、t client_socket=new socket(inetaddress.getlocalhost(),9999);new thread(new chatpanel(client_socket).start();catch(exception ex)ex.printstacktrace();class chatpanel extends basetransprivate string username;private jframe jthis;private jlabel lbl_rec;private jlabel lbl_edit;private jtextarea jta_rec;/
24、接收消息框private jtextarea jta_send;/发送消息框private jtextfield jtxt_file;private jscrollpane jp_rec;private jscrollpane jp_send;private jbutton btnselfile;/选择文件private jbutton btnsend;/发送消息按钮private jfilechooser jfc;/文件选择器public chatpanel(socket client_socket)super(client_socket);username=joptionpane.show
25、inputdialog(请输入用户名:);init();public void init()jthis=new jframe();jthis.settitle(你好:+username+ 欢迎进入聊天程序);jthis.setsize(600,400);jthis.setdefaultcloseoperation(jthis.exit_on_close);jthis.setlocationrelativeto(jthis);container c=jthis.getcontentpane();c.setlayout(null);lbl_rec=new jlabel(-消息记录-);lbl_ed
26、it=new jlabel(-文本编辑-);jtxt_file=new jtextfield();jta_rec=new jtextarea();jta_send=new jtextarea();jp_rec=new jscrollpane();jp_send=new jscrollpane();btnselfile=new jbutton(文件.);btnsend=new jbutton(发送);jfc=new jfilechooser();jp_rec.getviewport().add(jta_rec);jp_send.getviewport().add(jta_send);jta_re
27、c.setlinewrap(true);jta_send.setlinewrap(true);jtxt_file.seteditable(false);jta_rec.seteditable(false);jfc.setdialogtitle(请选择要传送的文件.);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);jtxt_file.setbounds(30,260,150,20)
28、;btnselfile.setbounds(180,260,80,20);btnsend.setbounds(350,260,80,20);btnselfile.addactionlistener(new actionlistener()public void actionperformed(actionevent ae)jfc.showopendialog(null);jtxt_file.settext(jfc.getselectedfile().getpath()+););c.add(lbl_rec);c.add(lbl_edit);c.add(jp_rec);c.add(jp_send)
29、;c.add(jtxt_file);c.add(btnselfile);c.add(btnsend);btnsend.addactionlistener(new actionlistener()public void actionperformed(actionevent ae)sendmessage(code=001;msg=+username+ +new date().tolocalestring()+rn+jta_send.gettext();jta_send.settext();if(jtxt_file.gettext().length()4)file file=new file(jt
30、xt_file.gettext().trim();sendmessage(code=010;filename=+file.getname()+;filesize=+file.length();sendmessage(code=000;username=+username);jthis.setvisible(true);public void messageevent(string msg) stringutil stringutil=new stringutil();stringutil.analysismessage(msg);string code=stringutil.getvalueb
31、ykey(code);if(code.equalsignorecase(0)this.closelink();joptionpane.showmessagedialog(jthis,您已近被管理员t走了,再见!);jthis.dispose();system.exit(0);else if(code.equalsignorecase(001)system.out.println(进入到001);jta_rec.settext(jta_rec.gettext()+rn+stringutil.getvaluebykey(msg);jta_rec.setcaretposition(jta_rec.g
32、ettext().length();else if(code.equalsignorecase(011)system.out.println(进入到011);sendmessage(code=012);else if(code.equalsignorecase(013)system.out.println(进入到了013);sendfiledata(jtxt_file.gettext().trim();this.initnet();jtxt_file.settext();sendmessage(code=014;username=+username);else if(code.equalsig
33、norecase(015)system.out.println(进入到了015);setfilename(stringutil.getvaluebykey(filename);setfilelength(integer.parseint(stringutil.getvaluebykey(filesize);int result=joptionpane.showconfirmdialog(null,username+,+stringutil.getvaluebykey(username)+发文件【+getfilename()+】给你,要接受吗?,提示,joptionpane.ok_cancel_
34、option);if(result=joptionpane.ok_option)jfilechooser jfc=new jfilechooser();jfc.setdialogtitle(请选择保存的目录.);jfc.setfileselectionmode(jfilechooser.directories_only);jfc.showopendialog(jthis);string path=jfc.getselectedfile().getpath();initfileoutputstream(path+/);sendmessage(code=016);setsendfileflag(true);else if(result=joptionpane.cancel_option)sendmessage(code=017);else if(code.equalsignorecase(018)joptionpane.showmessagedialog(jthis,username+,文件【+getfilename()+】传输成功,提示,joptionpane.information_mes
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年底薪提成劳动合同模板实操流程
- 2026年广东耐用再生棉保湿防草布源头厂家排行榜TOP10
- 2026年安全ccie培训内容核心要点
- 2026年急诊工作总结报告模板实操要点
- 植树节活动策划15篇
- 2026年建筑单位安全培训内容全套攻略
- 呼伦贝尔市新巴尔虎左旗2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 2026年班组安全酒精培训内容核心要点
- 信阳市固始县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 楚雄彝族自治州大姚县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 广东省高速公路工程可行性研究工作指引
- LY/T 3419-2024自然教育评估规范
- 低压带电工作的安全
- 外科学专业课 腹部损伤学习课件
- 2024膜曝气生物膜反应器污水处理设计标准
- 非ST段抬高型急性冠脉综合征诊断和治疗指南(2024)解读
- 出租房屋流动人口开展出租房屋流动人口专项整治工作的实施方案
- 统编版初中语文八年级下册第四单元:超级演说家
- 优化公司组织架构
- 西方社会学理论教学大纲
- 教学能力大赛-教学实施报告《大学英语2c》
评论
0/150
提交评论