您好,欢迎访问三七文档
苏州科技大学电子信息与智能实验中心JAVA高级程序设计大作业--一对多聊天程序设计专业年级计算机科学与技术班级学号姓名成绩任课教师2016年5月20日-1-一对多的聊天程序设计报告1任务概述编写一对多的聊天程序,程序由服务器和客户总原则两部分组成,服务器和客户端通过对象传送实现消息传递,两部分的交互方式如下:(1)客户端发送命令:registername=xu/给服务器注册用户,服务器允许注册,则返回消息:resultcommand=registerstate=ok/,否则返回消息:resultcommand=registerstate=errormessage=/;(2)客户端发送命令:loginname=xu/给服务器端进行登录,服务器如果允许登录,则返回消息:resultcommand=loginstate=ok/,否则返回消息:resultcommand=loginstate=errormessage=/;(3)客户端发送命令:messagefrom=xuto=zhangmessage=Thisisatest给服务器端,服务器收到命令后返回消息:resultcommand=messagestate=ok/;(4)服务器端向指定客户端发送命令:messagefrom=xuto=zhangmessage=Thisisatest/,如果message命令中的from属性为空,则表示由服务器器发送的消息;(5)客户端发送命令:logoutname=xu/给服务器进行注销登-2-录,服务器如果允许注销,则返回消息:resultcommand=logoutstate=ok/,否则返回消息:resultcommand=logoutstate=errormessage=/;请用以下方法之一实现:(1)使用JAVA本身的序列化方法序列化命令对象;(2)采用XML序列化命令对象;(3)采用JSON序列化命令对象;2系统需求分析(1)、该程序实现局域网内的聊天功能,包括服务器端程序和客户端程序两部分。客户端程序:可连接到服务器,并将消息发送到服务器端和接受服务器端发送来的信息。服务器端程序:负责发送接收和发送给客户的信息功能如下:连接:当客户端运行起来时客户客户端就连上了服务器端,当然首先要运行服务器,然后再运行客户端。(2)、在客户端具备提示选项、注册、登录、聊天、退出系统主要功能。提示选项功能:-3-为了明确用户做什么功能的操作而设置的提示选项模块。注册系统功能需求:如果选择的事注册模块,则完成用户的注册,如果注册成功,则可以进入登录模块,系统并返回提示数据,注册失败也回返回响应的提示数据。登陆系统功能需求:如果选择的事登录模块,则用户进入登录功能,登录成功则向客户端返回登陆信息,同时在服务器端显示出来。建立与服务器的连接并登陆,能显示登陆错误信息。用户登陆成功,将保存其号码,以便下次登陆时,不必再输入而可以直接选择,显示登陆时间。因此必须要求后台管理系统能根据系统需求,动态的、准确的更新系统数据。聊天管理功能需求:如果选择的事聊天模块,则进入聊天功能。与好友聊天,实现一对一和多对多聊天;有信息提示,提示到来信息,转发给消息指定的用户。退出功能需求:如果选择的事退出模块或者是收到相应的退出消息,则聊天结束,服务器会发送响应的数据。-4-3系统设计我的思路是实现客户端与服务器端进行一对多的通信,这是一种最简单的聊天工具,也是对于一个初学者说是最容易理解的。但我们实际生活中的聊天模型不是这样的,例如:腾讯QQ聊天工具是把服务器作为一个中转站,一个客户端向服务器端发出请求申请连接,另一个客户端也向服务器端请求连接,一个客户端先把信息发送到服务器,然后服务器把信息转发给另一个客户端,如果把它做成和腾讯QQ差不多,那还是有一定难度的,那就必须要掌握多线程,其实多线程是一个难点。我的思路如下:实现客户端与服务器端的一对多通信,也就是客户端将对象发送给发送给服务器,服务器接收信息,然后服务器将回应对象发送给客户端,客户端接收,就这样你一句我一句。你要写这个简单的聊天工具首先你首先要起一个窗口,客户端一个服务器端一个,在建立客户端与服务器的链接,运用socket和serversocket来编程,然后再对象输入输出流把客户端的信息发送给服务器端。我建立了如下类:-5-主要用到的知识如下:1)线程2)Java异常机制的处理3)网络编程中的socket和serversocket4)对象输入输出流5)hashMap4系统实现Command类:publicclassCommandimplementsSerializable{privateDatesendDate;publicDategetSendDate(){returnsendDate;}publicvoidsetSendDate(DatesendDate){-6-this.sendDate=sendDate;}Login类:publicclassLoginextendsCommand{privateStringname;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}}Logout类:publicclassLogoutextendsCommand{privateStringname;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}}Message类:publicclassMessageextendsCommand{privateStringfrom;privateStringto;privateStringmessage;publicStringgetFrom(){returnfrom;}publicvoidsetFrom(Stringfrom){this.from=from;}publicStringgetTo(){returnto;}publicvoidsetTo(Stringto){this.to=to;}publicStringgetMessage(){returnmessage;-7-}publicvoidsetMessage(Stringmessage){this.message=message;}Register类:publicclassRegisterextendsCommand{privateStringname;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}Result类:publicclassResultextendsCommand{privateCommandcommand;privateStringstate;publicResult(Commandcommand,Stringstate){super();this.command=command;this.state=state;}publicCommandgetCommand(){returncommand;}publicvoidsetCommand(Commandcommand){this.command=command;}publicStringgetState(){returnstate;}publicvoidsetState(Stringstate){this.state=state;}Client类:publicclassClient{privatestaticCommandc;privatestaticResultrs;publicstaticvoidmain(String[]args)throwsException{Socketsocket=newSocket(127.0.0.1,8888);-8-OutputStreamos=socket.getOutputStream();ObjectOutputStreamoos=newObjectOutputStream(os);InputStreamreader=socket.getInputStream();ObjectInputStreamois=newObjectInputStream(reader);Scannerinput=newScanner(System.in);booleanf=true;//循环判断Stringname=null;//发送方姓名StringtoName=null;//接收方姓名inttemp=0;//用于定位是否是已经在聊天了inti=0;intlogout=0;//判断是否退出System.out.println(请选择:1.注册2.登陆3.发消息4.退出:);while(f){i=input.nextInt();if(i==1){//注册System.out.print(我是:);name=input.next();Registerregister=newRegister();register.setName(name);register.setSendDate(newDate());Resultresult=newResult(register,1);oos.writeObject(result);rs=(Result)ois.readObject();System.out.println(服务器响应:command=+rs.getCommand()+state=+rs.getState());}elseif(i==2){//登录System.out.print(我是:);//Stringname=xu;name=input.next();Loginlogin=newLogin();login.setName(name);//c.setSendDate(newDate());Resultresult=newResult(login,2);oos.writeObject(result);rs=(Result)ois.readObject();System.out.println(服务器响应:command=+rs.getCommand()+state=+rs.getState());}elseif(i==3){//聊天中...-9-System.out.print(接受方姓名:);toName=input.next();System.out.print(我(+name+)说:);//name=input.next();Stringmessage=input.next();;Messagemessage2=newMessage();message2.setFrom(name);message2.setTo(toName);message2.setMessage(message);temp=1;if(message.equals(logout)){//如果输入logou就代表退出聊天服务器logout=1;}else{//c.setSendDate(newDate());Resultresult=newResult(message2,3);oos.writeObject(result);//读到消息Messagem=(Message)ois.readObject();Stringstr=我对+toName+说:+m.getMessage();System.out.println(str);FileInformation(str,我);}}if(i==4||logout==1){//退出Logoutlogout2=newLogout();logout2.setName(name);//c.setSendDate(newDate());Resul
本文标题:一对多通信报告
链接地址:https://www.777doc.com/doc-1890859 .html