西安郵電學院网络课程设计设计报告题目:基于TCPSOCKET的JAVA聊天室院系名称:计算机学院专业名称:网络工程班级:学生姓名:学号(8位):指导教师:设计起止时间:2011年6月20日~2011年7月1日第一章功能分析1.1需求分析人们日常生活中越来越多地使用聊天室这项应用来为自己的工作和学习服务。一个操作简单,界面友好、运行稳定的聊天室对于小型局域网的用户可以起到很好的交流作用。所谓聊天室就是一个可以让许多用户同时互相通信的网上园地,个人用户可以通过聊天室将自己融入整个主流社会中。根据目前使用聊天室的用户需求显示,用户对于聊天室主要有以下几点要求:(1).与聊天室成员一起聊天。(2).可以与聊天室成员私聊。(3).可以改变聊天内容风格。(4).用户注册(含头像)、登录。(5).服务器监控聊天内容。(6).服务器过滤非法内容。(7).服务器发送通知。(8).服务器踢人。(9).保存服务器日志。(10).保存用户聊天信息。该简易聊天室是为许多喜爱聊天的用户开发设计的,和许多大型的网络聊天室相比该小聊天室功能比较简单,但能实现基本的聊天功能,点对多、点对点聊天和基本的用户功能,登录、查看在线用户等。1.2软件功能描述(1)、户设置:用户自定义自己的登录名,成功设置后,服务端能接收到新设置的用户名。(2)、登录功能:在服务端开启的情况下,用户可以以自己自定义或者默认的登录名和登录地址端口登录到客户端,并能在服务器端显示登录状态。(3)、公聊:用户可以与“所有人”聊天,在线用户可正常接收并正确显示公聊消。(4)、私聊:用在线用户和其他用户聊天。记录对于聊天室的其他用户是不可见的。(5)、聊天心情:用户在聊天的过程中可以选择相应的心情来表达自己的情感。(6)、系统消息:服务端运行,为每一个用户都能接收服务器端发送的信息提示信息。(7)、用户的状态.每一个客户端用户都可以实时看到目前其他在线用户的状态。(8)、用户剔除:用户可以被系统剔除,并重新登记登录名和地址。(9)、用户退出:用户可以在正常情况下退出聊天室。(10)、服务端控制:服务端开启的情况下,用户才能登陆成功和聊天;用户设置的地址端口也必须与服务端的侦听端口一致,否则不能登录。第二章主要模块描述及流程图2.1模块介绍本聊天室分为聊天室服务端和聊天室客户端,服务端与客户端之间通过套接口Socket(TCP)连接。在java中使用套接口相当简单,JavaAPI为处理套接口的通信提供了一个类java.net.Socket,服务器采用多线程以满足多用户的请求,并通过创建一个AppSocket来监听来自客户的连接请求,默认IP地址为:127.0.0.1默认端口为8888。2.1.1服务端模块图聊天室服务端模块图3-1-1端口服务:输入要侦听的端口,默认为8888。启动服务:启动服务器,并开始在设置的端口中侦听,客户端用户可以登录并聊天。停止服务:关闭服务器,侦听结束。客户端用户不能再聊天。发送系统消息:服务器端给所有人或者个别用户发送消息。消息显示:可以显示所有用户的聊天记录,和上线、下线信息。退出服务器:退出程序,并停止服务。2.1.2客户端模块图聊天室服务端端口服务启动服务发送系统消息聊天室客户端用户设置连接设置发送/接收聊天消息用户登录停止服务退出服务器退出消息显示用户设置:用户可以设置自己的用户名进行聊天。连接设置:用户可以设置自己的服务器的IP,端口号,默认地址为:127.0.0.1:8888。用户登录:在聊天室服务端已开启的情况下,用户才能登录,之后才能开始聊天。用户注销:退出聊天,可以继续修改用户设置和连接设置。发送和接收聊天信息:用户可以用户发送信息,并能看送给自己或所有人的消息。退出:关闭所有聊天并退出客户端。2.2流程图设置侦听端口默认端口:8888设置用户名默认连接地址或用户名设置IP地址和端口2.3服务器客户端关系图(1).聊天室服务器端设计:ActionListenerChatServer-port:publicstaticin-serverSocket:ServerSocket-messageShow:JTextArea-userLinkList:UserLinkList-showStatus:JTextField+ChatServer():public+init():publicvoid+startService():publicvoid+stopService():publicvoid+sendStopToAll():publicvoidJFrameThreadServerListen-server:ServerSocket-userLinkList:UserLinkList-isStop:publicBoolean+ServerListen(ServerSocket,JComboBox,JTextArea,JTextField,UserLinkList)ServerReceive-textarea:JTextArea-userLinkList:UserLinkList-isStop:publicBoolean+ServerListen(ServerSocket,JComboBox,JTextArea,JTextField,UserLinkList)聊天室服务器端口服务启动服务聊天室客户端用户设置登录连接设置聊天退出2.3.1聊天室服务器端设计聊天室服务端主要包括4个文件,它们的功能如下:(1)AppServer.java服务器端进行监听客户端进行服务器的启动,以及端客户进行处理用户退出。(2)ServerFrame为服务器端管理界面,负责用户帐号信息保存和用户在线的状态和相关服务器端口的信息以及访问的方式。(3)serverChat.java负责对用户信息的处理包括公聊和私聊的信息的发送以及将聊天信息的序列化对象填加到保存聊天信息的记事本中。2.3.2聊天室客户端设计聊天室客户端主要包括6个文件,其主要功能如下:(1).ChatClient.java为客户端程序启动类,负责客户端的启动和退出。ActionListenerChatClient-port:publicstaticin-serverSocket:ServerSocket-messageShow:JTextArea-userLinkList:UserLinkList-showStatus:JTextField+ChatClient():public+init():publicvoid+Connect():publicvoid+DisConnect():publicvoid+SendMessage():publicvoidJFrameClientReceive-socket:Socket-output:ObjectOutputStream-input:ObjectInputStream+ClientReceive(Socket,ObjectOutputStream,ObjectInputStream,JComboBox,JTextArea,JTextField)Thread(2).Login.java为客户端程序登录界面,负责用户帐号信息的验证与反馈。(3).Register.java为客户端程序注册界面,负责用户帐号信息的注册验证与反馈。(4).ChatRoom.java为客户端程序聊天室主界面,负责接收、发送聊天内容与服务器端的Connection.java亲密合作。(5).Windowclose为ChatRoom.java的内部类,负责监听聊天室界面的操作,当用户退出时返回给服务器信息。(6).Clock.java为客户端程序的一个小程序,实现的一个石英钟功能。第三章主要程序代码和界面展示3.1服务器端启动代码和界面3.1.1服务器启动代码publicclassAppServerextendsThread{privateServerSocketserverSocket;privateServerFramesFrame;privatestaticVectoruserOnline=newVector(1,1);privatestaticVectorv=newVector(1,1);//创建服务器启动服务监听8888端口publicAppServer(){sFrame=newServerFrame();try{serverSocket=newServerSocket(8888);//获取服务器的主机名和IP地址InetAddressaddress=InetAddress.getLocalHost();sFrame.txtServerName.setText(address.getHostName());sFrame.txtIP.setText(address.getHostAddress());sFrame.txtPort.setText(8888);}catch(IOExceptione){fail(e,不能启动服务!);}sFrame.txtStatus.setText(已启动...);this.start();//启动线程}//退出服务器,退出消息publicstaticvoidfail(Exceptione,Stringstr){System.out.println(str+。+e);}//监听客户的请求,当有用户请求时创建Connection线程publicvoidrun(){try{while(true){//监听并接受客户的请求Socketclient=serverSocket.accept();newConnection(sFrame,client,userOnline,v);//支持多线程//System.out.println(userLength:+userLength);}}atch(IOExceptione){fail(e,不能监听!);}}//服务器publicstaticvoidmain(Stringargs[]){newAppServer();}}3.1.2服务器启动界面服务器登录界面图4-1-23.2注册主要代码及界面3.2.1注册主要代码publicclassRegisterextendsJFrameimplementsActionListener{privateJComboBoxcomboBox;privatestaticfinallongserialVersionUID=9019746127517522180L;JPanelpnlRegister;JLabellblUserName,lblGender,lblAge;JLabellblPassword,lblConfirmPass,lblEmail,logoPosition;JTextFieldtxtUserName,txtAge,txtEmail;JPasswordFieldpwdUserPassword,pwdConfirmPass;JRadioButtonrbtnMale,rbtnFemale;ButtonGroupbtngGender;JButtonbtnOk,btnCancel,btnClear;StringstrServerIp;finalJLabelheadLabel=newJLabel();//用于将窗口用于定位Dimensionscrnsize;Toolkittoolkit=Toolkit.getDefaultToolkit();//构造方法publicRegister(Stringip){super([HappyChat]聊天室注册窗口);strServerIp=ip;pnlRegister=newJPanel();this.getContentPane().add(pnlRegister);lblUserName=newJLabel(用户名:);lblGender=newJLabel(性别:);lblAge=newJLabel(年龄:);lblPassword=ne