




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
腾讯腾讯QQ(OICQ是由深圳市腾讯计算机系统公司幵发的, 基于Internet的即时聊腾讯腾讯QQ(OICQ是由深圳市腾讯计算机系统公司幵发的, 基于Internet的即时聊JavaJava语言程序设计课程设计题目 聊天小程序 (socket编程+多线程)学 院 商学院 专业 信息管理与信息系统 班 级 信息111 学号8 学生姓名 张语轩 指导教师 余法红 编写日期 目录、需求分析当今主流的聊天工具有QQUCMSNMessenger等,国内最热门的当属QQ天工具。您可以使用QQ和好友用户进行交流,信息即时发送,即时回复,收发及时、功能全面。此外QQ还具有BP机网上寻呼、聊天室、传输文件、语音邮件、手机短讯服务等功能,QQ不仅仅是虚拟的网络寻呼机,更可与传统的无线寻呼网、GSM移动电话的短消息系统互联,目前 QQ和全国多家寻呼台、移动通信公司有业务合作。是国内不可多得的中文网络寻呼机。 QQ支持显示朋友在线信息、即时传送信息、即时交谈、即时发送文件和网址。QC可以在Win95/98/NT/2000操作系统下运行,是十分灵活的网络寻呼工具。它会自动检查您是否已联网,如果您的电脑已连入Internet,可以搜索网友、显示在线网友,可以根据QC号、昵称、姓名、email地址等关键词来查找,找到后可加入到通讯录中。当您的通讯录中的网友在线时,QQ中朋友的头像就会显示在线,根据提示就可以发送信息,如果对方登记了寻呼机或幵通了GSM手机短消息,即使离线了,您也可及时将信息传递给您的好友。虽然以上这些软件是免费的,并且功能越来越强大。但是它们的唯一的不足就是必须要联网或者下载到它们的服务端,要不然是没法脱离Intenet使用的。为了能在一个没有连接到Intenet的局域网使用聊天工具,那就必须要有服务器端。本系统就是包括服务器端与客户端,可以在局域网聊天的一个工具。二、系统概述我们实现的是局域网中的聊天功能,运行服务程序后,服务器创建成功,然后使服务器对某一个设定的端口处于监听状态,当有客户端请求建立连接时,服务器就可接受请求,建立连接!这样服务器和客户端就可相互发送消息,实现聊插件幵发,插件幵发,EclipsePlatform 则是一个幵放的可扩展 IDE,提供了一个通用的幵插件幵发,插件幵发,EclipsePlatform 则是一个幵放的可扩展 IDE,提供了一个通用的幵天功能!系统的功能要求A.服务器端主要功能如下:在特定端口上进行侦听,等待客户端连接。用户可以配置服务器端的侦听端口,默认端口为 8888。向已经连接到服务器端的用户发送系统消息。统计在线人数。当停止服务时,断开所有的用户连接。B.客户端的主要功能如下:连接到已经开启聊天服务的服务器端。用户可以配置要连接的服务器端的IP地址和端口号。用户可以配置连接后显示的用户名。当服务器端开启的话,用户可以随时登录和注销。用户可以向所有人或某一个人发送消息。三、 系统运行环境本程序基于java和Eclipse开发环境,可以在一般的装有windows系统的主机上运行。Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组成——EclipsePlatform、JDTCDT和PDEJDT支持Java幵发、CDT支持C幵发、PDE用来支持发平台。它提供建造块和构造并运行集成软件幵发工具的基础。四、功能需求描述本系统针对局域网进行联机聊天。聊天室分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的信息,客户端需要登陆到服务器端才可以实现正常的聊天功能。本系统主要实现如下功能:其界面主要采用了包,包以及包等。程序实现了聊天室的基本功能,其中有:1、 启动服务器。2、 进入客户端界面。3、 登录聊天室。4、 发送信息(实现按回车键发送消息)。5、 关闭服务器。服务器:在特定端口上进行侦听,等待客户端连接。向已经连接到服务器端的用户发送系统消息。当停止服务时,断幵所有的用户连接。系统运行稳定、安全可靠。一台主机只能启动一个服务器。客户端:连接到已经幵启聊天服务的服务器端。当服务器端幵启后,用户可以发表聊天信息。用户可以向所有人或某一个人发送消息。系统运行稳定、安全可靠
五、总体设计聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:在Internet上的聊天程序一般都是以服务器提供服务端连接响应, 使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在 TCP/IP环境下,实现服务器端和客户端两部分程序。首先通过继承JFrame类构造服务器界面。设计客户端程序使其能够完成正常的通信功能设计侦听程序,使其显示登录的 ip地址端口号,以及用户昵称,通过侦听按钮可以调用客户端程序,实现聊天功能。六、系统模块结构图六、系统模块结构图主要功能框架如下图所示:代码:客户端A客户端C丿 '・T 、上服务器 发客户端 .>J退出线 纟线 送\服聊退聊1)packagechat;import.*;publicclassActionProcessimplementsRunnable{privateChatClientclient;Stringname="";Stringsendtoname="";StringsendtoID;Stringfilename="";Stringfilepath="";publicActionProcess(ChatClientclient){=client;}publicvoidaction(ActionEvente)throwsException{if()=={try{else{Stringaddr=("请输入服务器IP:");InetAddressaddress=(addr);InetSocketAddresssocketAddress=newInetSocketAddress(address,5555);=newThread(this);}}catch(IOExceptionee){}}if()=={try{filesendServerfilesendserver=newfilesendServer();();}catch(Exceptionee){();}}if()=={try{filesendClientfilesendclient=newfilesendClient();();}catch(Exceptionee){}}if()=={try{}catch(IOExceptione1){();}(0);}if("表情")){}else{em+="着";}if()=={if(s!=null){try{}catch(IOExceptione1){}{{{{}}if()=={sendtoID=("请输入对方ID:");sendtoname=("请输入对方姓名:");if(s!=null){try{}catch(IOExceptione1){}}}}}publicvoidrun(){Strings=null;while(true)sendtoall=newButton(" sendtoall=newButton(" 群聊");try{}catch(IOExceptione){try{}catch(Exceptionep){}break;}}}}(2)packagechat;import.*;import.*;import.*;import.*;publicclassClient{publicstaticvoidmain(Stringargs[])newChatClient();}}classChatClientextendsFrameimplementsActionListener,Runnable{publicButtonlisten,connection,sendtoall,sendtoone,exit,filesend;publicJComboBoxemote;publicTextFieldinputName,inputContent;publicTextAreachatResult;publicSocketsocket=null;publicDataInputStreamin=null;publicDataOutputStreamout=null;publicThreadthread;ChatClient(){socket=newSocket();Boxbox1=();listen=newButton("作为服务器监听");connection=newButton("连接服务器");filesend=newButton("发送文件");exit=newButton("退出");sendtoone=newButton("私聊");(false);(false);(false);(false);inputName=newTextField(6);(newColor(162,231,250));inputContent=newTextField(22);(newColor(162,231,250));chatResult=newTextArea("",17,20,;(newColor(162,231,250));JLabeljlname=newJLabel(" 输入昵称");(jlname);(inputName);(listen);(connection);(filesend);(exit);Boxbox2=();emote=newJComboBox();(newDefaultComboBoxModel(newString[]{"表情","微笑","甜笑","惊喜","嘻嘻","扮酷","嘿嘿","傻笑","好奇","媚眼","鬼脸","陶醉","害(10));(10));(10));(10));羞","生气","嚷嚷","发怒","伤心","高明","菜鸟","问号","狂笑大哭","示爱","呻吟","想想"}));(false);JLabeljlintput=newJLabel("输入聊天内容");(jlintput);(inputContent);(emote);(sendtoall);(sendtoone);(this);(this);(this);(this);(this);(this);Boxbox3=();(chatResult);thread=newThread(this);Boxbox0=();(10));(box1);(box3);(10));(box2);(10));add(box0);setBounds(10,30,500,400);setBackground(newColor(80,212,248));setVisible(true);validate();addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){(0);try{();}catch(IOExceptione1){();}}});}publicvoidactionPerformed(ActionEvente){ActionProcessactionProcess=newActionProcess(this);try{(e);}catch(Exceptione1){();}}publicvoidrun(){Strings=null;while(true){try{s=();("\n"+s);}catch(IOExceptione){("与服务器断开连接");try{();}catch(Exceptionep){}break;}}}}(3)packagechat;import.*;import.*;import.*;publicclassChatServer{publicstaticvoidmain(String[]args)throwsException{ServerSocketsvSocket=null;Vectorthreads=newVector();try{svSocket=newServerSocket(5555);}catch(Exceptionex){return;}try{intnid=0;while(true){Socketsocket=();ServerThreadst=newServerThread(socket,threads);(nid++);(st);newThread(st).start();for(inti=0;i<();i++){ServerThreadtemp=(ServerThread)(i);}}}catch(Exceptionex){}}}classServerThreadimplementsRunnable{privateVectorthreads;privateSocketsocket=null;privateDataInputStreamin=null;privateDataOutputStreamout=null;privateintnid;publicServerThread(Socketsocket,Vectorthreads){=socket;=threads;try{in=newDataInputStream());out=newDataOutputStream());}catch(Exceptionex){}}publicvoidrun(){try{while(true){Stringreceive=();if(receive==null)return;if("黯然下线了")){for(inti=0;i<();i++){ServerThreadst=(ServerThread)(i);("***"+receive+"***");}}elseif("上线了")){for(inti=0;i<();i++){ServerThreadst=(ServerThread)(i);("<"+getID()+">:"+receive);}}elseif("监听中")){for(inti=0;i<();i++){ServerThreadst=(ServerThread)(i);("***"+receive+"***");}}elseif("说")){if("大家")){for(inti=0;i<();i++){ServerThreadst=(ServerThread)(i);("<"+getID()+">:"+receive);}}else{inttemp=("<");inttemp1=(">");StringtempS=(temp+1,temp1);inti=(tempS);ServerThreadst=(ServerThread)(i);("<"+getID()+">:"+receive);st=(ServerThread)(getID());("<"+getID()+">:"+receive);}}else{ServerThreadst=(ServerThread)(getID());("***"+receive+"***");}}}catch(Exceptionex){(this);();}try{();}catch(Exceptionex){();}}publicvoidwrite(Stringmsg){synchronized(out){try{(msg);}catch(Exceptionex){}}}publicintgetID(){return;}publicvoidsetID(intnid){=nid;}}(4)packagechat;publicclassfilesendClient{publicvoidfilesend()throwsException{StringsendtoIP=("请输入对方IP:");Socketsocket=newSocket(sendtoIP,1234);BufferedReaderbr=newBufferedReader(newInputStreamReader()));PrintStreamps=newPrintStream());Filefile=getFile();());());Stringmsg=();if("已存在".equals(msg)){(null,"文件已存在,请不要重复上传!");return;}longfinishLen=(msg);FileInputStreamfis=newFileInputStream(file);OutputStreamout=();byte[]buffer=newbyte[1024];intlen;(finishLen);while((len=(buffer))!=-1)(buffer,0,len);();();}publicFilegetFile()throwsException{Filefile=null;booleanflag=false;while(flag==false){Stringfilepath=("请输入要上传的路径:");file=newFile(filepath);if(!()){(null,"您输入的路径不存在,请重新输入!");flag=false;}elseif()){(null,"占不支持文件夹上传!请输入一个文件路径!");flag=false;}elseflag=true;}returnfile;}}(5)packagechat;publicclassfilesendServer{publicvoidfilereceive()throwsException{ServerSocketserverSocket=newServerSocket(1234);(null,"服务已启动,绑定1234端口!");while(true){Socketsocket=();newfileServerThread(socket).start();}}}classfileServerThreadextendsThread{Socketsocket;publicfileServerThread(Socketsocket){=socket;}publicvoidrun(){FileOutputStreamfos=null;try{BufferedReaderbr=newBufferedReader(newInputStreamReader()));PrintStreamps=newPrintStream());StringfileName=();longfileLen=());Filedir=newFile("upload");();Filefile=newFile(dir,fileName);if()&&()==fileLen){("已存在");return;}else{());}Stringtime=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").format(newDate());longstart=();InputStreamin=();fos=newFileOutputStream(file,true);byte[]buffer=newbyte[1024];intlen;while((len=(buffer))!=-1){(buffer,0,len);if()==fileLen)break;}();longend=();time=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").format(newDate());("上传成功");();}catch(IOExceptione){if(fos!=null)try{();}catch(IOExceptione1){();}}}}运行结果:将5个Java源文件:、、、、。分别编译这5个Java源文件,或运行“javac*.java命令,编译全部的源文件,然后运行连接服务器的主类,即。服务器启动成功结果分析:在进入聊天室之前必须先启动服务器,实现服务器端的连接。然后运行结果分析:进行服务器监听,再运行。私聊结果分析:进入聊天室,在输入框中输入聊天内容,点击私聊群聊结果分析:多个用户进入聊天室之后,在输入框中输入聊天内容,点击群聊运行、文件。结果分析:进行文件传送八、设计体会这次设计经过几天的不懈努力,程序基本满足聊天的需要。完成后的程序实现了用户登陆聊天室、用户在线聊天、用户退出等功能。在这次程序设计中,我主要负责需求分析,功能需求描述,系统模块图等的撰写,程序设计期间,通过询问老师,同学和网上搜索相关解答等多种方式学习到很多课堂上没有的知识,还积累了一定的实践经验,增强
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 和员工股合同范本
- 合作种植大葱合同范例
- 员工提成合同范例
- 加工竖立桅杆合同范本
- 台州市商品房出租合同范本
- 吴江区律师顾问合同范本
- 冲压模具开发合同范本
- 代理记账报税 合同范本
- 传媒公司聘用合同范本
- 员工股合同范本
- 2024年英德中小学教师招聘真题
- 2024年车险理赔保险知识试题库(附含答案)
- 食品安全追溯管理体系制度
- 2024-2025学年新教材高中语文 第六单元 13.2 装在套子里的人教案 部编版必修下册
- 中央2024年中国医学科学院血液学研究所血液病医院招聘17人笔试历年典型考题及考点附答案解析
- JBT 14732-2024《中碳和中碳合金钢滚珠丝杠热处理技术要求》
- 【直播带货发展前景探究:以抖音平台为例6700字(论文)】
- 2024入赘协议书范本
- 2024届江苏省苏北七市(南通)高三二模考试英语试题读后续写思路分析My best examination 讲义
- 计算机系统原理13015习题答案
- 2024年益阳医学高等专科学校单招职业技能测试题库及答案解析
评论
0/150
提交评论