毕业综合训练课题名称基于Java的聊天系统设计及实现系别计算机技术与工程专业计算机网络技术班级09计网(1)班姓名张超学号109104010042指导老师魏涛江西蓝天学院1一、实习目的通过本次实习,能对公司产品、产品流程等达到熟练运用的地步,同时应该对JAVA及其应用有一个非常清晰、明了的认识。本次的实习内容主要包括:对公司产品有一个初步的认识及确定其应该包括哪些模块实现什么功能;对JAVA的基础知识和理论学习;理论联系实际对JAVAEclipse进行具体操作;学会用JAVA进行设计,JAVA初步程序设计。二、实习时间2011年11月28日至2012年2月10日三、实习地点南昌轩逸文化传播有限公司四、公司简介及工作内容南昌轩逸文化传播有限公司,是由数名南昌高校大学生自主创业而建立起来的广告公司,公司宗旨:企业宣传的荧屏,学生发展的平台。公司主要从事校园一系列广告业务,拥有南昌众多高校的校园广告资源,是一家由江西省市政府、高校与社会共同扶持起来的大学生实体企业。刚来到轩逸文化传播有限公司,每个人彼此都不熟悉。和我相似,很多刚来的实习生不知道该干什么。公司为了让我们有一个交流的平台,促进新、老同事间的相互沟通,决定开发一个聊天系统,便于同事间的日常工作交流。开发的聊天系统我们决定采用Java语言。由于本人在大学期间学习过Java程序的应用开发,所以被选入该系统的开发项目组。五、实习内容(一)基于Java的聊天系统的分析1、需求分析聊天系统不外乎两个方面,服务器端和客户端。首先,服务器端的任务:(1)服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接(包括判断没有响应的连接超时)。(2)服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。客户端应该完成的工作包括:2(1)与服务器端建立通信通道,向服务器端发送信息。(2)接收来自服务器的信息。2、分析小结相对服务器而言,客户端的任务更加简单。通过以上的简单分析可知,解决上述四个问题,即完成了该聊天系统的核心。(二)开发环境工具基于JAVA聊天系统的设计主要运用JAVA与语言与Socket类结合而开发。其开发的主要环境包括:服务器端:(Windows平台)首先应有java环境jdk,建议采用jdk1.5以上,另外还需配置classpath环境变量,添加Hibernate运行所需要的jar包,本系统开发工具为MyEclipse5.5;客户端:只要有java环境jdk就可以,建议jdk1.6。(三)基于Java聊天系统的设计与实现1、聊天系统总体设计要点聊天系统的设计跟普通网站设计有着许多不同之处。普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。在设计聊天系统的过程中,必须要考虑以下几个设计要点:(1)实现思想在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。(2)服务器端工作流程服务器端通过socket()系统调用创建一个Socket数组后(即设定了接受连接客户的最大数目),与指定的本地端口绑定bind(),就可以在端口进行侦听listen()。如果有客户端连接请求,则在数组中选择一个空Socket,将客户端地址赋给这个Socket。然后登录成功的客户就可以在服务器上聊天了。(3)客户端工作流程客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据就可以了。2、功能模块划分聊天系统工作原理图如图1所示。3图1聊天系统工作原理图3、聊天系统各功能模块(1)服务器程序模块服务器与客户间通过套接口Socket(TCP)连接。在java中使用套接口相当简单,JavaAPI为处理套接口的通信提供了一个类java.net.Socket,使得编写网络应用程序相对容易。服务器采用多线程以满足多用户的请求,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为9527,然后无限循环调用accept()方法接受客户程序的连接。服务器程序启动结果如图5-2所示。图2聊天服务器的实现图服务器端程序的代码如下:importjava.awt.*;importjava.awt.event.*;importjava.io.*;importjava.net.*;4importjava.util.*;importjavax.swing.*;importjava.util.*;//**聊天系统服务器程序聊天系统服务器注册窗口如图3所示:图3聊天服务器注册窗口服务器注册功能代码如下://封装登录信息classCustomerimplementsSerializable{StringcustName;StringcustPassword;}//封装注册信息classRegister_CustomerextendsObjectimplementsjava.io.Serializable{StringcustName;StringcustPassword;Stringage;Stringsex;Stringemail;}//用于发送聊天和在线用户的信息classMessageimplementsSerializable{VectoruserOnLine;Vectorchat;5}//聊天信息序列化classChatimplementsSerializable{StringchatUser;StringchatMessage;StringchatToUser;booleanwhisper;}//退出信息序列化classExit1implementsSerializable{Stringexitname;}(2)客户端程序模块客户端通过Socket(InetAddress,port)建立与服务器的连接。服务器与客户都通过构造ObjectInputStream,ObjectOutputStream来建立输入输出流,然后双方通过该输入输出流来相互传递信息,一旦收到客户方的连接请求,服务器accept()方法返回一个新建的Socket对象。客户端然后向服务器发送消息,比如文件传输等,服务器收到来自客户的请求后,针对不同的消息处理请求。客户端程序实现结果如图4所示。图4客户端程序实现图客户端程序的Socket工作过程如下:a、建立Socket连接:在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接通道。6b、数据通信:利用虚拟连接通道传送数据信息进行通道。c、关闭:通信结束时,再将所建的虚拟连接拆除。其工作过程图如图5所示。图5Socket的工作过程图客户端程序的主要代码如下:importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;importjava.net.*;importjava.io.*;importjava.util.*;importjava.applet.*;//*聊天系统客户端程序////设置服务器IP地址/publicclassChatClient{publicChatClient(){}publicstaticvoidmain(Stringargs[]){newLogin();}}//登录信息序列化1服务器socket2监听4接收5读6写7关闭3客户端etsocket6写5读7关闭7classCustomerextendsObjectimplementsjava.io.Serializable{StringcustName;StringcustPassword;}//注册信息序列化classRegister_CustomerextendsObjectimplementsjava.io.Serializable{StringcustName;StringcustPassword;Stringage;Stringsex;Stringemail;}//用于发送聊天和在线用户的信息classMessageimplementsSerializable{VectoruserOnLine;Vectorchat;}//聊天信息序列化classChatimplementsSerializable{StringchatUser;StringchatMessage;StringchatToUser;booleanwhisper;}//退出信息序列化classExitimplementsSerializable{Stringexitname;}8六、实习总结本次实习中,通过java语言实现了简单的实时聊天功能,经过细心的调试和排错解决了绝大部分的问题。鉴于初次涉及采用语言编写聊天系统,在开始阶段感觉逻辑复杂,难以控制,目前仍有一些未能解决的缺陷。通过本次实习,我学到了许多东西,也看到了自己本身存在着许多问题。当前的软件的功能日趋复杂,不学到一定的深度和广度是难以在实际工作中应付自如的。这也反映出我在学校中所学的知识存在理论与实践脱离的情况。需再加强学习,开拓视野,增强实践操作技能,为以后的工作而努力。在此次实习中,最感谢实习单位和指导老师给予我在工作和学习上帮助!使我提前感受到以后的工作内容和工作方法。通过这几个月的实习,让自己的知识更加的充分和扎实,对以后有了良好的规划。在实习期间,我学会了很多有用东西,看到了自己的缺点与发展方向,磨练了自己的心性,让自己能够在社会的困难路程中越挫越勇、再接再厉。通过实习也让我学会了如何设计一个良好的用户界面,掌握了一些设计用户界面所要注意的要点。并在实践中掌握了用户界面设计的设计方法。这对自己是一个极大的促进和提高。让我能够更好的在学业上取得进步。在未来的学习中我会更加的努力学习,并把所学习的成果全都应用到社会实践中去。最后,再次感谢实习单位同事和魏涛老师给予我在工作和学习上莫大的帮助!9实习单位地址:实习单位名称(盖章):年月日指导教师评语建议成绩:优良中及格不及格指导教师签字年月日最终评定成绩:优良中及格不及格系主任签字年月日