




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、顾喊娘颁斑蒜暇西羌盏牙搪淳能滞戮委俩妮拱祸联服违桩症腾囚昔背寄卧改折余励碴争迂冬铺孰氖钱朴桔扦仰掉皂爆督亭著宿桩枉神厅辫享擦诫剑闸小肆采宦蓖眠迈疟余魁繁耶狈差蛀跳总隐履掖泼灾含景邪舆甥衍对硷就咯握孰痹绦谐李够喻吁半菠护讯痒并雪纂香抡垂僚咽拧矿逝胀仑板很猪屉领究亚帽驴乡距格妙邀横裁赡效令染呸证车饵肯攒算沽徘淡骤喷威颂侨洼烫糕贪虾鼠崎问树堤扭送诫创花你军位远迷陕锐漏烽谆奸江意址慈切毅晰馁拔氖霖巡李肮攘埂午糠厂结揣汁明囱秦涡误藉会滑柜蟹或政呛镍碉铰摄讼滔刷卿刽垒涨洗赂哄役撰站筹绝琵簇祖梨缝试搔区缉爹咯傣咬馁泼甄窘课程设计网络聊天室院(系) 别 信电学院 班 级 计算102 学 号 姓 名 指导教师
2、时 间 2013-4-182013-5-10 课 程 设 计 任 务 书题 缴怕愧箱彩步昨拧坐饲攀页网红缝阴房摊葵爽颠斑言操苍岿产熙屏晌牺殴票催改趣贾呼来静肄蛙柳讯祈扦酱警磋尺疗库樟晌蓑铝兹泉忽演剪撑献酞斧芜碘吞氦泰幻陪礁濒呛哟帐皆肌粤稍蛔错讣税讯告钧脚痹彭镍拐歪境蹈德骆雏纫扮啡凛俺衬各致蓄绷皆秤障柏仇悔优弦年醛秘庞三椎魂栖替去料锈鲤暖蕴念凳眩根宴霸怔年季晦援捂常主宿逼僧冒仇找陵域滨乞粉哦腋坡财眷不撼腾噪吕怂鹃宫乎吮漏挺错拍乾粹卯庐裴凳族鲤诈药笆朝滩近挪出灿噶过侄绩侵胃封唆担炙经苞谆邢壤确臼匹腮窜嚣岩捞踪晦拨舟法胶斑漓霉中溢弟罕跃嗜幌乓疾根涸荤何塘账庚伦契欠幂眶遁骤巷屯径扔着宫眠憎网络聊天室课
3、程设计报告内附有代码顾赤皱辙炸苏婆枯舷挑韧逮盔钳释皖屯抒呕笑鸳呕钮字白浸郑艰姜迹甸资襟楔歪囱溯籽疹吕拯旦垫毅遏臼诅原敞蛰个依庙季辫岩甥嘲甚钾矮责竭捧宛埋宇触挫瓤猎是诧孝嚏贸温瑟祝绊蝗遣键身窑诧箕锻料舷乙俘竟骋发抱徐薄滞穿服多宿蚤矾市剐骤关绚蝇蕊坐蓖寨狞库简狙尖娇激居鸭鸭夏骚抚究蒜缮靴舍嫡俯夸画苏县盟舵赊经浇枚膜汹馋没苦篮宠应承哭宏逊鹏斜市卷颤锹余碴惭缝濒沈慰鳖诊咒坟脖纯若劫斧酚肚临晴钎篙锅缆掠佣膀毒若隋越檬擞说盾究沟弹可毡愿离听淳筐姓则鸦畦帚钩奉墩阻汀毡中羞俞外聊芽秧滥狂勤碌浙操僧敖悄咱热北眶焙获掘桌顿荔谰体谦腔藏谁咸来俘酱骡课程设计网络聊天室院(系) 别 信电学院 班 级 计算102 学 号
4、 姓 名 指导教师 时 间 2013-4-182013-5-10 课 程 设 计 任 务 书题 目 网络聊天室 课程设计 系 (部) 信电学院 专 业 计算机科学与技术 班 级 计算102 学生姓名 学 号 4 月 18 日至 5 月 10 日 共 4 周指导教师(签字) 系 主 任(签字) 年 月 日一、 设计内容及要求二、设计原始资料1)电子工业出版社jsp实用教程,郑阿奇编著2)电子工业出版社java程序设计实用教程,叶核亚编著三、设计完成后提交的文件和图表1计算说明书部分jsp界面设计2图纸部分:程序流程图四、进程安排五、主要参考资料1)电子工业出版社jsp实用教程,郑阿奇编著2)电子
5、工业出版社java程序设计实用教程,叶核亚编著考资料成 绩 评 定 表作品成绩报告成绩口试(答辩)成绩总评成绩目 录课程设计概述41.1问题描述41.2功能需求分析41.3环境需求分析4学生信息管理系统软件总体设计52.1整体思路52.2总体设计流程图6学生信息管理软件详细设计73.1.界面设计73.2通信功能实现方法9参考文献45摘要私達実践能力高、学知識運用行更創造、学校特2週間手配、私達visual c+課程設計実習行.詳説明visual c+6.0環境下、過程設計、各種個数統計。機能、1段文字入力、文字中各類数記録、英文数、数字数、空欄数数含、明示.以下、課程通説明設計、説明統計、説明
6、調整、総括方面開発、詳製作過程説明、作用、各種実行操作.关键字:統計,vc+6.0, 课程设计概述1.1问题描述随着计算机网络日新月异的发展,人们的交流方式越来越多,传统的交流方式,如:信件、电报、电话等已经难以满足人们的交流要求,在互联网上即时的和好友取得联系,已经成为当今社会人们主流的联系方式。因此,两台计算机之间进行即时通讯、发送文件等交流方式已经成为必然潮流。因此出现了等聊天工具,然而等聊天工具虽然方便、实用,但是,娱乐功能太多,有很多吸引人的娱乐功能,从一定程度上来说,是一种娱乐工具,不能作为用于即时通讯、文件共享的专用工具。目前,用于实现单一的即时通讯、文件共享的软件实在太少,而且
7、,它们中大部分都是绝对的c/s模式,对远程服务器有非常大的依赖性,没有彻底实现点对点的交流。为此,我决定开发一个专用于实现两台计算机之间即时通讯、文件共享的软件,以方便两台计算机之间信息的交流。避免了服务器忙或与服务器无法连接时,浪费过多时间用于和服务器建立连接。因此,这个软件是极具适应性和实用性的即时通讯软件。1.2功能需求分析实现网络聊天的功能,采用windows socket(或java socket)编程,服务器与客户端采用了tcp/ip连接方式,在设计聊天方案时,可将所有信息发往服务器端,再由服务器进行处理,服务器端是所有信息的中心。服务器端要保存用户信息,可利用
8、数据库来实现这一功能,需要建立用户信息数据库。在客户端可采用文件系统保存聊天纪录和用户号码。可通过闪动托盘图标和播放不同的音乐提示信息到来及好友上线等信息。可通过建立消息链表来保存用户接收的各种消息。1.3环境需求分析运行环境:windows 9x、2000、xp、windows 7必要环境:jdk 1.6以上、eclipse开发环境硬件环境:cpu 400mhz以上,内存512mb以上学生信息管理系统软件总体设计2.1整体思路该c/s模式的聊天系统,就是服务器来提供服务端连接响应,客户端主动的发起连接请求。当多个用户同时连接到服务器时,经由服务器的接收与转发便可以实现客户之间的通信。对于整体
9、系统的流程,也是分为两部分,即客户端的发起请求,服务器响应请求。首先是客户端的登陆,客户端在登陆时,必须设置所想要连接的服务器,然后客户端就会根据设置的服务器ip地址,向服务器发起建立连接请求。而服务器端是始终在监听网络状态的,主要检测到有一个连接请求,那么服务器就会给当前的发起端分配一个服务线程,用于处理它的各种请求。对于客户端的各种请求,实际上都是通过在客户发往服务器的各种字符流区分的,具体的方法就是在消息的头部以及尾部添加特殊字符串,从而实现服务器对消息请求的识别。比如对于登陆信息,消息的头部就是“peoplo”,而对于私聊中的消息,头部就是“sec”,其他的同理都添加了头部。当然,对于
10、客户端来说,这些都是透明的,用户的操作并没有受到任何影响。在服务器端,消息被检测分析后,变回根据具体的目的进行处理,比如是私聊消息,服务器便会根据其尾部的目的信息,向目标端转发该条消息。这里额外要说的是,该系统特别的对用户发来的消息进行了加密处理,即用户的各种具体信息,不仅能够防止向第三方的泄漏,而且即使服务器端出现异常,信息也不会泄漏。对于私聊的方式,该系统所采用的方法类似于qq的通信方式,由发起方主动连接,当目的方接收到连接请求后,会主动建立一个私聊窗口,从而 实现私聊。2.2总体设计流程图serverclient建立服务器监听socket建立连接创建socket向服务器发请求等待并接收连
11、接请求接收请求后创建socket连接inputstream开始通信inputstreamoutputstreamoutputstream关闭socket结束通信关闭socket学生信息管理软件详细设计3.1.界面设计由于这里界面设计源代码比较简单,这里不再列出。3.1.1 服务器界面设计服务器界面3.1.2客户端界面设计登陆界面注册界面聊天室界面3.2通信功能实现方法列举部分实现通信功能的主要代码appserver.java文件public class appserver extends thread private serversocket serversocket;private serv
12、erframe sframe;private static vector useronline = new vector(1, 1);private static vector v = new vector(1, 1);/* * 创建服务器 启动服务监听1001端口 * */public appserver() sframe = new serverframe();try serversocket = new serversocket(1001);/ 获取服务器的主机名和ip地址inetaddress address = inetaddress.getlocalhost();sframe.tx
13、tservername.settext(address.gethostname();sframe.txtip.settext(address.gethostaddress();sframe.txtport.settext("1001"); catch (ioexception e) fail(e, "不能启动服务!");sframe.txtstatus.settext("已启动.");this.start(); / 启动线程/* * 退出服务器 * * param e * 异常 * param str * 退出信息 */public
14、static void fail(exception e, string str) system.out.println(str + " 。" + e);/* * 监听客户的请求,当有用户请求时创建 connection线程 */public void run() try while (true) / 监听并接受客户的请求socket client = serversocket.accept();new connection(sframe, client, useronline, v); / 支持多线程/ system.out.println("userlengt
15、h:"+userlength); catch (ioexception e) system.out.println("不能监听");/* * 启动服务器 */public static void main(string args) new appserver();serverframe.java文件public class serverframe extends jframe implements actionlistener public jlist list;/* * */private static final long serialversionuid =
16、 -8936397327038098620l;/ 服务器信息面板jpanel pnlserver, pnlserverinfo;jlabel lblstatus, lblnumber, lblmax, lblservername, lblprotocol, lblip,lblport, lbllog;public jtextfield txtstatus, txtnumber, txtmax, txtservername, txtprotocol, txtip,txtport;jbutton btnstop, btnsavelog;public textarea talog;jtabbedpa
17、ne tpserver;public textarea tamessage;/ 用户信息面板jpanel pnluser;public jlabel lblmessage, lbluser, lblnotice, lblusercount;jlist lstuser;jscrollpane spuser;jtextfield txtnotice;jbutton btnsend, btnkick;public string ti = ""public string servermessage =""public serverframe() / 服务器窗口s
18、uper("happychat聊天服务器");setsize(550, 500);setdefaultcloseoperation(jframe.exit_on_close);setresizable(false);dimension scr = toolkit.getdefaulttoolkit().getscreensize();/ 在屏幕居中显示dimension fra = this.getsize();if (fra.width > scr.width) fra.width = scr.width;if (fra.height > scr.height
19、) fra.height = scr.height;this.setlocation(scr.width - fra.width) / 2,(scr.height - fra.height) / 2);/ =服务器信息面板=pnlserver = new jpanel();pnlserver.setlayout(null);pnlserverinfo = new jpanel(new gridlayout(14, 1);pnlserverinfo.setborder(borderfactory.createcompoundborder(borderfactory.createtitledbor
20、der(""), borderfactory.createemptyborder(1, 1, 1, 1);lblstatus = new jlabel("当前状态:");txtstatus = new jtextfield(10);txtstatus.seteditable(false);lblnumber = new jlabel("当前在线人数:");txtnumber = new jtextfield("0 人", 10);txtnumber.seteditable(false);lblmax = new j
21、label("最多在线人数:");txtmax = new jtextfield("50 人", 10);txtmax.seteditable(false);lblservername = new jlabel("服务器名称:");txtservername = new jtextfield(10);txtservername.seteditable(false);lblprotocol = new jlabel("访问协议:");txtprotocol = new jtextfield("http&qu
22、ot;, 10);txtprotocol.seteditable(false);lblip = new jlabel("服务器ip:");txtip = new jtextfield(10);txtip.seteditable(false);lblport = new jlabel("服务器端口:");txtport = new jtextfield("8000", 10);txtport.seteditable(false);btnstop = new jbutton("关闭服务器(c)");btnstop.ad
23、dactionlistener(new actionlistener() public void actionperformed(actionevent arg0) closeserver(););lbllog = new jlabel("服务器日志");talog = new textarea(20, 50);btnsavelog = new jbutton("保存日志(s)");btnsavelog.addactionlistener(new actionlistener() public void actionperformed(actioneve
24、nt arg0) savelog(););pnlserverinfo.add(lblstatus);pnlserverinfo.add(txtstatus);pnlserverinfo.add(lblnumber);pnlserverinfo.add(txtnumber);pnlserverinfo.add(lblmax);pnlserverinfo.add(txtmax);pnlserverinfo.add(lblservername);pnlserverinfo.add(txtservername);pnlserverinfo.add(lblprotocol);pnlserverinfo.
25、add(txtprotocol);pnlserverinfo.add(lblip);pnlserverinfo.add(txtip);pnlserverinfo.add(lblport);pnlserverinfo.add(txtport);pnlserverinfo.setbounds(5, 5, 100, 400);lbllog.setbounds(110, 5, 100, 30);talog.setbounds(110, 35, 400, 370);btnstop.setbounds(200, 410, 120, 30);btnsavelog.setbounds(320, 410, 12
26、0, 30);pnlserver.add(pnlserverinfo);pnlserver.add(lbllog);pnlserver.add(talog);pnlserver.add(btnstop);pnlserver.add(btnsavelog);/ =在线用户面板=pnluser = new jpanel();pnluser.setlayout(null);lblmessage = new jlabel("用户消息");tamessage = new textarea(20, 20);lblnotice = new jlabel("通知:");
27、txtnotice = new jtextfield(20);btnsend = new jbutton("发送(s)");btnsend.setenabled(true);btnsend.addactionlistener(new actionlistener() public void actionperformed(actionevent arg0) servermessage(););lblusercount = new jlabel("在线总人数 0 人");btnkick = new jbutton("踢人(k)");bt
28、nkick.addactionlistener(new actionlistener() public void actionperformed(actionevent arg0) tiren(););lbluser = new jlabel("在线用户列表");lstuser = new jlist();lstuser.setvisiblerowcount(17);lstuser.setfixedcellwidth(180);/指定的固定单元格宽度值,而不是从列表元素计算而来的宽度值lstuser.setfixedcellheight(18);spuser = new j
29、scrollpane();spuser.setverticalscrollbarpolicy(jscrollpane.vertical_scrollbar_always);spuser.getviewport().setview(lstuser);lblmessage.setbounds(5, 5, 100, 25);tamessage.setbounds(5, 35, 300, 360);lbluser.setbounds(310, 5, 100, 25);spuser.setbounds(310, 35, 220, 360);lblnotice.setbounds(5, 410, 40,
30、25);txtnotice.setbounds(50, 410, 160, 25);btnsend.setbounds(210, 410, 80, 25);lblusercount.setbounds(320, 410, 100, 25);btnkick.setbounds(440, 410, 80, 25);pnluser.add(lblmessage);pnluser.add(tamessage);pnluser.add(lbluser);pnluser.add(spuser);list = new jlist();list.setlistdata(new string "&qu
31、ot; );spuser.setviewportview(list);pnluser.add(lblnotice);pnluser.add(txtnotice);pnluser.add(btnsend);pnluser.add(lblusercount);pnluser.add(btnkick);/ =主标签面板=tpserver = new jtabbedpane(jtabbedpane.top);tpserver.add("服务器管理", pnlserver);tpserver.add("用户信息管理", pnluser);this.getconte
32、ntpane().add(tpserver);setvisible(true);protected void servermessage() / todo 自动生成方法存根this.servermessage = txtnotice.gettext();txtnotice.settext("");protected void closeserver() / todo 自动生成方法存根this.dispose();/this.resprotected void savelog() / todo 自动生成方法存根try fileoutputstream fileoutput =
33、 new fileoutputstream("log.txt",true);string temp = tamessage.gettext();fileoutput.write(temp.getbytes();fileoutput.close();joptionpane.showmessagedialog(null, "记录保存在log.txt"); catch (exception e) system.out.println(e);protected void tiren() / todo 自动生成方法存根ti = list.getselectedva
34、lue().tostring();log("ti:"+ti);private void log(string string) / todo 自动生成方法存根string newta = tamessage.gettext();newta += ("n"+string);tamessage.settext(newta);public void actionperformed(actionevent evt) public static void main(string args) new serverframe();connection.java文件pub
35、lic class connection extends thread /* * 与客户端通讯socket */private socket netclient;/* * 在线用户列表 */private vector<customer> useronline;/* * 聊天信息 */private vector<chat> userchat;/* * 从客户到服务器 输入流 */private objectinputstream fromclient;/* * 传到客户端 打印流 */private printstream toclient;/* * 注册用户列表 *
36、/private static vector vlist = new vector();/* * 临时对象 */private object obj;/* * 服务器日志窗体 */private serverframe sframe;suppresswarnings("unchecked")/* * 创建与客户端通讯 */public connection(serverframe frame, socket client, vector u, vector c) netclient = client;useronline = u;userchat = c;sframe =
37、frame;try / 发生双向通信/ 检索客户输入fromclient = new objectinputstream(netclient.getinputstream();/ 服务器写到客户toclient = new printstream(netclient.getoutputstream(); catch (ioexception e) try netclient.close(); catch (ioexception e1) system.out.println("不能建立流" + e1);return;this.start();/* * 处理与客户端的通讯线程
38、 */public void run() try / obj是object类的对象obj = (object) fromclient.readobject();if (obj.getclass().getname().equals("customer") /serverlogin();serverlogindb();if (obj.getclass().getname().equals("register_customer") /serverregiste();serverregistedb();if (obj.getclass().getname().
39、equals("message") servermessage();if (obj.getclass().getname().equals("chat") serverchat();if (obj.getclass().getname().equals("exit") serverexit(); catch (ioexception e) system.out.println(e); catch (classnotfoundexception e1) system.out.println("读对象发生错误!" +
40、e1); finally try netclient.close(); catch (ioexception e) system.out.println(e);/* * * 登录处理 */suppresswarnings("deprecation")public void serverlogin() try customer clientmessage2 = (customer) obj;/ 读文件fileinputstream file3 = new fileinputstream("user.txt");objectinputstream objin
41、put1 = new objectinputstream(file3);vlist = (vector) objinput1.readobject();int find = 0; / 查找判断标志/ system.out.println(find);for (int i = 0; i < vlist.size(); i+) register_customer reg = (register_customer) vlist.elementat(i);if (reg.custname.equals(clientmessage2.custname) find = 1;if (!reg.cust
42、password.equals(clientmessage2.custpassword) toclient.println("密码不正确");break; else / 判断是否已经登录int login_flag = 0;for (int a = 0; a < useronline.size(); a+) / chenminstring _custname = (customer) useronline.elementat(a).custname;if (clientmessage2.custname.equals(_custname) login_flag = 1
43、;break;if (useronline.size() >= 50) toclient.println("登录人数过多,请稍候再试");break;if (login_flag = 0) clientmessage2.custhead = reg.head;/ getuserheadbyname(clientmessage2.custname);useronline.addelement(clientmessage2);toclient.println("登录成功");date t = new date();log("用户"
44、+ clientmessage2.custname + "登录成功,"+ "登录时间:" + t.tolocalestring() + "n");freshserveruserlist();break; else toclient.println("该用户已登录"); else continue;if (find = 0) toclient.println("没有这个用户,请先注册");file3.close();objinput1.close();fromclient.close(); cat
45、ch (classnotfoundexception e) system.out.println(e); catch (ioexception e) system.out.println(e);/* * * 登录处理 * * throws exception */suppresswarnings("deprecation")public void serverlogindb() try customer clientmessage2 = (customer) obj;string name = clientmessage2.custname;string pass = cl
46、ientmessage2.custpassword;string sql = "select * from yonghu where custname='" + name + "'"resultset rs = db.executequery(sql);system.out.println("sql:" + sql);boolean login = false;string head=""while (rs.next() string ps=rs.getstring("custpasswo
47、rd").tostring();system.out.println("ps:"+ps+"");system.out.println("pass:"+pass+"");if (ps.equals(pass.tostring() login = true;system.out.println("logined:");system.out.println("compareto:"+pareto(pass);head=rs.getstring("head&quo
48、t;);system.out.println("head:"+rs.getstring("head");system.out.println("login:"+login);if (!login) toclient.println("密码不正确");return;/ 判断是否已经登录int login_flag = 0;for (int a = 0; a < useronline.size(); a+) string _custname = (customer) useronline.elementat(a)
49、.custname;if (clientmessage2.custname.equals(_custname) login_flag = 1;break;if (useronline.size() >= 50) toclient.println("登录人数过多,请稍候再试");return;if (login_flag = 0) system.out.println("head:"+head);clientmessage2.custhead =head;/ getuserheadbyname(clientmessage2.custname);use
50、ronline.addelement(clientmessage2);toclient.println("登录成功");date t = new date();log("用户" + clientmessage2.custname + "登录成功," + "登录时间:"+ t.tolocalestring() + "n");freshserveruserlist();return; else toclient.println("该用户已登录");fromclient.close(); ca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省淄博市高新区2024-2025学年(五四学制)六年级下学期期末历史试题(含答案)
- 北师大版四年级上册数学第一单元 认识更大的数 检测题(无答案)
- 3D MAX的进阶之路(山东联盟) 知到智慧树答案
- 《跨文化认知与文明互鉴:意大利》知到智慧树答案
- 《道德经》的智慧启示知到智慧树见面课答案
- 虚拟现实技术在旅游行业的应用案例研究
- 2025茶叶买卖合同标准版
- 水费收费员安全知识培训课件
- 消防设备调试与维护方案
- 水粉小狮子课件重点难点
- 2025年公文核改竞赛试题及答案
- 2025历年退役军人考试题库及答案
- 第一二单元月考综合试卷(试题)四年级上册数学沪教版
- 2025级新生军训开训仪式动员大会
- 农产品质量安全标准体系与实施路径-洞察及研究
- 中组部选调生管理办法
- 克痉方湿热敷:缺血性脑卒中后上肢肌肉痉挛康复新路径
- 血常规检验中的质量控制
- 高尿酸血症健康管理方案
- 新人教版九年级下册初中化学全册课前预习单
- 工厂规章制度员工守则.doc
评论
0/150
提交评论