计算机网络课程设计报告书4464816318

上传人:痛*** 文档编号:41655051 上传时间:2021-11-22 格式:DOC 页数:15 大小:181KB
返回 下载 相关 举报
计算机网络课程设计报告书4464816318_第1页
第1页 / 共15页
计算机网络课程设计报告书4464816318_第2页
第2页 / 共15页
计算机网络课程设计报告书4464816318_第3页
第3页 / 共15页
点击查看更多>>
资源描述
计算机网络课程设计报告肅荿蚈蚅羁莈莇袁袇莇蒀蚄膆莆薂衿肁蒅蚄蚂羇蒄莄袇袃肁蒆蚀蝿肀蚈羆膈聿莈蝿肄肈蒀羄羀肈薃螇袆肇蚅薀膅膆莅螅肁膅蒇薈羇膄蕿螃羃膃荿薆衿膂蒁袂膇膂薄蚅肃膁蚆袀罿膀莆蚃袅艿蒈袈螁芈薀蚁肀芇芀袇肆芆蒂虿羂芆薄羅袈芅蚇螈膆芄莆薀肂芃葿螆羈莂薁蕿袄莁芁螄螀莀莃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膆莆薂衿肁蒅蚄蚂羇蒄莄袇袃肁蒆蚀蝿肀蚈羆膈聿莈蝿肄肈蒀羄羀肈薃螇袆肇蚅薀膅膆莅螅肁膅蒇薈羇膄蕿螃羃膃荿薆衿膂蒁袂膇膂薄蚅肃膁蚆袀罿膀莆蚃袅艿蒈袈螁芈薀蚁肀芇芀袇肆芆蒂虿羂芆薄羅袈芅蚇螈膆芄莆薀肂芃葿螆羈莂薁蕿袄莁芁螄螀莀莃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膆莆薂衿肁蒅蚄蚂羇蒄莄袇袃肁蒆蚀蝿肀蚈羆膈聿莈蝿肄肈蒀羄羀肈薃螇袆肇蚅薀膅膆莅螅肁膅蒇薈羇膄蕿螃羃膃荿薆衿膂蒁袂膇膂薄蚅肃膁蚆袀罿膀莆蚃袅艿蒈袈螁芈薀蚁肀芇芀袇肆芆蒂虿羂芆薄羅袈芅蚇螈膆芄莆薀肂芃葿螆羈莂薁蕿袄莁芁螄螀莀莃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膆莆薂衿肁蒅蚄蚂羇蒄莄袇袃肁蒆蚀蝿肀蚈羆膈聿莈蝿肄肈蒀羄羀肈薃螇袆肇蚅薀膅膆莅螅肁膅蒇薈羇膄蕿螃羃膃荿薆衿膂蒁袂膇膂薄蚅肃膁蚆袀罿膀莆蚃袅艿蒈袈螁芈薀蚁肀芇芀袇肆芆蒂虿羂芆薄羅袈芅蚇螈膆芄莆薀肂芃葿螆羈莂薁蕿袄莁芁螄螀莀莃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膆莆薂衿肁蒅蚄蚂羇蒄莄袇袃肁蒆蚀蝿肀蚈羆膈聿莈蝿肄肈蒀羄羀肈薃螇袆肇蚅薀膅膆莅螅肁膅蒇薈羇膄蕿螃羃膃荿薆衿膂蒁袂膇膂薄蚅肃膁蚆袀罿膀莆蚃袅艿蒈袈螁芈薀蚁肀芇芀袇肆芆蒂虿羂芆薄羅芀蚇聿膀蕿蚆蝿羃蒅螆袁腿莁螅羄羁芇螄蚃膇膃螃袆羀薂螂羈芅蒈螁肀肈莄螁螀芄芀螀袂肆薈衿羅节蒄袈肇肅莀袇螇芀芆蒄罿肃节蒃肁莈薁蒂螁膁蒇蒁袃莇莃蒀羅腿艿葿肈羂薇薈螇膈蒃薈袀羁荿薇肂膆莅薆螂聿芁薅袄芄薀薄羆肇蒆薃聿芃莂薂螈肅芈蚂袁芁膄蚁羃肄蒂蚀蚃艿蒈虿袅膂莄蚈羇莈芀蚇聿膀蕿蚆蝿羃蒅螆袁腿莁螅羄羁芇螄蚃膇膃螃袆羀薂螂羈芅蒈螁肀肈莄螁螀芄芀螀袂肆薈衿羅节蒄袈肇肅莀袇螇芀芆蒄罿肃节蒃肁莈薁蒂螁膁蒇蒁袃莇莃蒀羅腿艿葿肈羂薇薈螇膈蒃薈袀羁荿薇肂膆莅薆螂聿芁薅袄芄薀薄羆肇蒆薃聿芃莂薂螈肅芈蚂袁芁膄蚁羃肄蒂蚀蚃艿蒈虿袅膂莄蚈羇莈芀蚇聿膀蕿蚆蝿羃蒅螆袁腿莁螅羄羁芇螄蚃膇膃螃袆羀薂螂羈芅蒈螁肀肈莄螁螀芄芀螀袂肆薈衿羅节蒄袈肇肅莀袇螇芀芆蒄罿肃节蒃肁莈薁蒂螁膁蒇蒁袃莇莃蒀羅腿艿葿肈羂薇薈螇膈蒃薈袀羁荿薇肂膆莅薆螂聿芁薅袄芄薀薄羆肇蒆薃聿芃莂薂螈肅芈蚂袁芁膄蚁羃肄蒂蚀蚃艿蒈虿袅膂莄蚈羇莈芀蚇聿膀蕿蚆蝿羃蒅螆袁腿莁螅羄羁芇螄蚃膇膃螃袆羀薂螂羈芅蒈螁肀肈莄螁螀芄芀螀袂肆薈衿羅节蒄袈肇肅莀袇螇芀芆蒄罿肃节蒃肁莈薁蒂螁膁蒇蒁袃莇莃蒀羅腿艿葿肈羂薇薈螇膈蒃薈袀羁荿薇肂膆莅薆螂聿芁薅袄芄薀薄羆肇蒆薃聿芃莂薂螈肅芈蚂袁芁膄蚁羃肄蒂蚀蚃艿蒈虿袅膂莄蚈羇莈芀蚇聿膀蕿蚆蝿羃蒅螆袁腿莁螅羄羁芇螄蚃膇膃螃袆羀薂螂羈芅蒈螁肀肈莄螁螀芄芀螀袂肆薈衿羅节蒄袈肇肅莀袇螇芀芆蒄罿肃节蒃肁莈薁蒂螁膁蒇蒁袃莇莃蒀羅腿艿葿肈羂薇薈螇膈蒃薈袀羁荿薇肂膆莅薆螂聿芁薅袄芄薀薄羆肇蒆薃聿芃莂薂螈肅芈蚂袁芁膄蚁羃肄蒂蚀蚃艿蒈虿袅膂莄蚈羇莈芀蚇聿膀蕿蚆蝿羃蒅螆袁腿莁螅羄羁芇螄蚃膇膃螃袆羀薂螂羈芅蒈螁肀肈莄螁螀芄芀螀袂肆薈衿羅节蒄袈肇肅莀袇螇芀芆蒄罿肃节蒃肁莈薁蒂螁膁蒇蒁袃莇莃蒀羅腿艿葿肈羂薇薈螇膈蒃薈袀羁荿薇肂膆莅薆螂聿芁薅袄芄薀薄羆肇蒆薃聿芃莂薂螈肅芈蚂袁芁膄蚁羃肄蒂蚀蚃艿蒈虿袅膂莄蚈羇莈芀蚇聿膀蕿蚆蝿羃蒅螆袁腿莁螅羄羁芇螄蚃膇膃螃袆羀薂螂羈芅蒈螁肀肈莄螁螀芄芀螀袂肆薈衿羅节蒄袈肇肅莀袇螇芀芆蒄罿肃节蒃肁莈薁蒂螁膁蒇蒁袃莇莃蒀羅腿艿葿肈羂薇薈螇膈蒃薈袀羁荿薇肂膆莅薆螂聿芁薅袄芄薀薄羆肇蒆薃聿芃莂薂螈肅芈蚂袁芁膄蚁羃肄蒂蚀蚃艿蒈虿袅膂莄蚈羇莈芀蚇聿膀蕿蚆蝿羃蒅螆袁腿莁螅羄羁芇螄蚃膇膃螃袆羀薂螂羈芅蒈螁肀肈莄螁螀芄芀螀袂肆薈衿羅节蒄袈肇肅莀袇螇芀芆蒄罿肃节蒃肁莈薁蒂螁膁蒇蒁袃莇莃蒀羅腿艿葿肈羂薇薈螇膈蒃薈袀羁荿薇肂膆莅薆螂聿芁薅袄芄薀薄羆肇蒆薃聿芃莂薂螈肅芈蚂袁芁膄蚁羃肄蒂蚀蚃艿蒈虿袅膂莄蚈羇莈芀蚇聿膀蕿蚆蝿羃蒅螆袁腿莁螅羄羁芇螄蚃膇膃螃袆羀薂螂羈芅蒈螁肀肈莄螁螀芄芀螀袂肆薈衿羅节蒄袈肇肅莀袇螇芀芆蒄罿肃节蒃肁莈薁蒂螁膁蒇蒁袃莇莃蒀羅腿艿葿肈羂薇薈螇膈蒃薈袀羁荿薇肂膆莅薆螂聿芁薅袄芄薀薄羆肇蒆薃聿芃莂薂螈肅芈蚂袁芁膄蚁羃肄蒂蚀蚃艿蒈虿袅膂莄蚈羇莈芀蚇聿膀蕿蚆蝿羃蒅螆袁腿莁螅羄羁芇螄蚃膇膃螃袆羀薂螂羈芅蒈螁肀肈莄螁螀芄芀螀袂肆薈衿羅节蒄袈肇肅莀袇螇芀芆蒄罿肃节蒃肁莈薁蒂螁膁蒇蒁袃莇莃蒀羅腿艿葿肈羂薇薈螇膈蒃薈袀羁荿薇肂膆莅薆螂聿芁薅袄芄薀薄羆肇蒆薃聿芃莂薂螈肅芈蚂袁芁膄蚁羃肄蒂蚀蚃艿蒈虿袅膂莄蚈羇莈芀蚇聿膀蕿蚆蝿羃蒅螆袁腿莁螅羄羁芇螄蚃膇膃螃袆羀薂螂羈芅蒈螁肀肈莄螁螀芄芀螀袂肆薈衿羅节蒄袈肇肅莀袇螇芀芆蒄罿肃节蒃肁莈薁蒂螁膁蒇蒁袃莇莃蒀羅腿艿葿肈羂薇薈螇膈蒃薈袀羁荿薇肂膆莅薆螂聿芁薅袄芄薀薄羆肇蒆薃聿芃莂薂螈肅芈蚂袁芁膄蚁羃肄蒂蚀 一需求分析聊天系统不外乎两个方面,服务器端和客户端。简单分析一下两个方面所要完成的任务,对设计这个程序来说,等于完成了一半。首先来看一下服务器端的任务: 服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接(包括判断没有响应的连接超时)。 服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。 以上就是服务器端最主要的两个任务。不难看出,服务器端的任务并不复杂。客户端应该完成的工作包括:与服务器端建立通信通道,向服务器端发送信息。接收来自服务器的信息。相对服务器而言,客户端的任务更加简单,有了以上的简单分析,可以知道,解决上述四个问题,即完成了该聊天系统的核心。二概要设计 运用所学的编程知识,加上网络方面的一些知识结构,模拟QQ聊天工具,通过SOCKET编写的简易网络聊天工具。Socket,简称套接字,用于实现网络上客户和服务器之间的连接。也就是说网络上两个或两个以上双工方式通信的进程之间总有一个连接,这个连接的端点成为套接字,套接字是在比较低的层次上通信的。具体的说:一个服务器应用程序一般侦听一个特定的端口等待客户端的连接请求,当一个连接请求到达时,客户端和服武器端建立一个通信连接,在连接过程中,客户端被分配一个本地端口与一个socket建立连接,客户端通过写socket来通知服务器,以读socket中的信息,类似的服务器也获得一个本地端口,它需要一个新的端口号来侦听原始端口上的其他连接请求。服务器也通过它的本地端口连接一个socket,通过读写和客户端通信。Socket程序的工作过程:1、建立Socket连接:在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接通道。2、数据通信:利用虚拟连接通道传送数据信息进行通道。3、关闭:通信结束时,再将所建的虚拟连接拆除。具体如下:服务器1服务器socket2监听4接收5读6写7关闭3客户端etsocket6 写5 读7关闭 三次握手:第一次握手:原主机发送一个带有本次连接的序号的请求的一个数据帧第二次握手:目的主机收到请求后,如果同意连接,则发回一个带有一个本次连接序号和源端机连接序列号的确认。第三此握手:源端机收到含有两次初始序列号的应答后,在向目的主机发送一个带有两次连接的序列号的确认。具体过程如下ACK=1第一次握手,主机A向主机B发送连接请求第二次握手,主机B收到主机A的请求,向主机A回发一个确认,同时向主机A发送一个连接请求第三次握手,主机A收到主机B发送的数据包在向主机B发送一个确认连接主机A 主机BACK=1,SYN=1,SEQ=aaaaaaaaaaSYN=1,SEQ= 基于UDP点对点聊天的设计要点:1、实现思想在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。2、服务器端工作流程服务器端通过socket()系统调用创建一个Socket数组后(即设定了接受连接客户的最大数目),与指定的本地端口绑定bind(),就可以在端口进行侦听listen()。如果有客户端连接请求,则在数组中选择一个空Socket,将客户端地址赋给这个Socket。然后登录成功的客户就可以在服务器上聊天了。3、客户端工作流程客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据就可以了。三详细设计(1)服务器程序模块服务器与客户间通过套接口Socket(TCP)连接。在java中使用套接口相当简单,Java API为处理套接口的通信提供了一个类.Socket,使得编写网络应用程序相对容易。服务器采用多线程以满足多用户的请求,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为9527,然后无限循环调用accept()方法接受客户程序的连接。服务器线程源码:package qq.server;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import .Socket;import java.util.*;import qq.dao.hibernate.IServiceDao;import qq.entity.*;public class ServerController private User user;private Socket s;private IServiceDao dao;private ObjectInputStream ois;private ObjectOutputStream oos;private OnlineUser onlineUser;public ServerController(Socket s) super();dao=ServerMainClass.userDao;this.s = s;public void handle() throws Exception ois=new ObjectInputStream(s.getInputStream();oos=new ObjectOutputStream(s.getOutputStream();onlineUser=new OnlineUser(ois,oos);while(true)Request req=(Request)ois.readObject();ois.read();RequestType type=req.getType();if(type.equals(RequestType.exit)exitHandle();break;else if(type.equals(RequestType.login)loginHandle(req);else if(type.equals(RequestType.register)registerHandle();else if(type.equals(RequestType.offline)offlineHandle();break;else if(type.equals(RequestType.changeInformation)changeInformationHandle();else if(type.equals(RequestType.modifypasswd)modifypasswdHandle(req);else if(type.equals(RequestType.sendMessage)sendMessageHandle(req);else if(type.equals(RequestType.receiveFile)receiveFileHandle(req);else if(type.equals(RequestType.sendFile)sendFileHandle(req);private void modifypasswdHandle(Request req) Long id=Long.parseLong(req.getData("id");String oldpwd=req.getData("oldpwd");String newpwd=req.getData("newpwd");Response res=new Response(RequestType.modifypasswd);try dao.updatePwd(id, oldpwd, newpwd);res.setData(1);try oos.writeObject(res); catch (IOException e) e.printStackTrace(); catch (RuntimeException e) try oos.writeObject(res); catch (IOException e1) e1.printStackTrace();private void changeInformationHandle() try User user=(User)ois.readObject();Response res=new Response(RequestType.changeInformation);try dao.updateUser(user);res.setData(1);/修改成功返回值带一个整形值oos.writeObject(res);oos.flush(); catch (RuntimeException e) oos.writeObject(res);/失败则返回值不带参数oos.flush();e.printStackTrace(); catch (IOException e) e.printStackTrace(); catch (ClassNotFoundException e) e.printStackTrace();private void exitHandle() try s.close(); catch (IOException e) e.printStackTrace();/发送文件private void sendFileHandle(Request req) /try /User u=(User)ois.readObject();/ catch (Exception e) /e.printStackTrace();/ /接受文件private void receiveFileHandle(Request req) /发送消息private void sendMessageHandle(Request req) Response res=new Response(RequestType.receiveMessage);Message message=null;try message=(Message)ois.readObject();res.setData(message); catch (IOException e) e.printStackTrace(); catch (ClassNotFoundException e) e.printStackTrace();User to=message.getTo();if(to=null)sendToAllUser(res);/如果收信人为null,则发送信息给所有人else/发送信息给to和他自己Response res1=new Response(RequestType.individualTalk);res1.setData(message);ObjectOutputStream o=null;Set<User>set=ServerMainClass.userMap.keySet();Iterator it=set.iterator();while(it.hasNext()User u=(User)it.next();if(u.equals(to)o=ServerMainClass.userMap.get(u).getOos();break;try o.writeObject(res1);o.flush(); catch (IOException e) e.printStackTrace();/下线private void offlineHandle() try ServerMainClass.userMap.remove(user);Response res=new Response(RequestType.offline);res.setData(user);/把下线用户发送给所有客户端sendToAllUser(res);s.close(); catch (IOException e) e.printStackTrace();private void registerHandle() User user=dao.addUser();try oos.writeObject(user);System.out.println(user.getId()+":"+user.getName();oos.flush(); catch (IOException e) e.printStackTrace();/登录private void loginHandle(Request req) Long id=Long.parseLong(String)req.getData("id");String pwd=(String)req.getData("pwd");user=dao.getUser(id,pwd);Response res;try Set<User>users=ServerMainClass.userMap.keySet();Iterator iter=users.iterator();while(iter.hasNext()User u=(User)iter.next();if(u.equals(user)res=new Response(RequestType.haveOnline);oos.writeObject(res);oos.flush();return;/该用户已经在线res=new Response(RequestType.online);res.setData(user);oos.writeObject(res);oos.flush();/给刚上线用户发送在线用户列表if(user!=null)Set<User>set=ServerMainClass.userMap.keySet();oos.write(set.size();Iterator it=set.iterator();while(it.hasNext()oos.writeObject(it.next();oos.flush();sendToAllUser(res);/通知在线用户有新用户上线ServerMainClass.userMap.put(user, onlineUser);/保存用户信息 catch (IOException e) e.printStackTrace();private void sendToAllUser(Response res)try Collection c= ServerMainClass.userMap.values();Iterator it=c.iterator();while(it.hasNext()ObjectOutputStream o=(OnlineUser)it.next().getOos();o.writeObject(res);o.flush(); catch (IOException e) e.printStackTrace();(2)客户程序模块客户通过Socket(InetAddress,port)建立与服务器的连接。服务器与客户都通过构造ObjectInputStream,ObjectOutputStream来建立输入输出流,然后双方通过该输入输出流来相互传递信息,一旦收到客户方的连接请求,服务器accept()方法返回一个新建的Socket对象。客户端然后向服务器发送消息,比如文件传输等,服务器收到来自客户的请求后,针对不同的消息处理请求。具体的源码如下:package qq.client;import java.awt.Color;import java.io.EOFException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import javax.swing.JOptionPane;import javax.swing.JTextPane;import javax.swing.text.BadLocationException;import javax.swing.text.SimpleAttributeSet;import javax.swing.text.StyleConstants;import .*;import java.util.Calendar;import qq.client.panel.UserListPanel;import qq.client.windows.IndividualTalkWindow;import qq.entity.*;public class ClientThread extends Threadprivate ObjectInputStream ois;private ObjectOutputStream oos;private Socket s;private JTextPane receive;private JTextPane record;private JTextPane publicInfo;private UserListPanel userList;private SimpleAttributeSet set;public ClientThread(JTextPane receive, JTextPane record, JTextPane publicInfo, UserListPanel userList) this.receive = receive;this.record = record;this.publicInfo = publicInfo;this.userList = userList;s=ClientMainClass.socket;ois=ClientMainClass.ois;oos=ClientMainClass.oos;set=new SimpleAttributeSet();StyleConstants.setFontSize(set, 16);StyleConstants.setFontFamily(set,"宋体");StyleConstants.setForeground(set, new Color(0,139,139);Overridepublic void run() while(s.isConnected()try Response res=(Response)ois.readObject();if(res!=null)RequestType type=res.getType();if(type.equals(RequestType.online)onlineHandle(res);else if(type.equals(RequestType.offline)offlineHandle(res);else if(type.equals(RequestType.changeInformation)changeInformationHandle(res);else if(type.equals(RequestType.modifypasswd)modifypasswdHandle(res);else if(type.equals(RequestType.receiveMessage)receiveMessageHandle(res);else if(type.equals(RequestType.individualTalk)individualTalkHandle(res);else if(type.equals(RequestType.receiveFile)receiveFileHandle(res);else if(type.equals(RequestType.publicInfo)publicInfoHandle(res); catch (EOFException e) e.printStackTrace(); catch (Exception e) e.printStackTrace();private void modifypasswdHandle(Response res) if(res.getData()!=null)JOptionPane.showMessageDialog(null, "密码修改成功");elseJOptionPane.showMessageDialog(null, "密码修改失败n服务器忙,请稍后再试!");private void changeInformationHandle(Response res) if(res.getData()!=null)JOptionPane.showMessageDialog(null, "修改成功");elseJOptionPane.showMessageDialog(null, "服务器忙,请稍后再试!");private void publicInfoHandle(Response res) String str=(String)res.getData();publicInfo.setText(str);private void receiveFileHandle(Response res) private void individualTalkHandle(Response res) Message message=(Message)res.getData();User user=message.getFrom();if(!ClientMainClass.individual.containsKey(user.getId()int flag=JOptionPane.showConfirmDialog(null,user.getName()+"请求与你私聊,是否接受?","",JOptionPane.YES_NO_OPTION);if(flag=JOptionPane.NO_OPTION)return;IndividualTalkWindow indi=new IndividualTalkWindow(user);ClientMainClass.individual.put(user.getId(), indi.getReceivedmessageArea().getTextPane();indi.showMe();JTextPane jtp=ClientMainClass.individual.get(user.getId();try /输出信息发送人,时间jtp.getDocument().insertString(jtp.getDocument().getLength(),user.getName()+" "+message.getTime()+"n",set); catch (BadLocationException e) e.printStackTrace();/输出信息message.analysisMessage(jtp);private void receiveMessageHandle(Response res) Message message=(Message)res.getData();if(ClientMainClass.shield.contains(message.getFrom().getId()return;try /输出信息发送人,时间receive.getDocument().insertString(receive.getDocument().getLength(),message.getFrom().getName()+""+message.getTime()+"n",set); catch (BadLocationException e) e.printStackTrace();/输出信息message.analysisMessage(receive);private void offlineHandle(Response res) User user=(User)res.getData();ClientMainClass.onlineUsers.remove(user);userList.freash(ClientMainClass.onlineUsers);Calendar c = Calendar.getInstance();String time=c.get(Calendar.YEAR)+"-"+c.get(Calendar.MONTH)+"-"+c.get(Calendar.DAY_OF_MONTH)+" "+(c.get(Calendar.HOUR_OF_DAY)+8)+":"+c.get(Calendar.MINUTE)+":"+c.get(Calendar.SECOND);try receive.getDocument().insertString(receive.getDocument().getLength(),user.getName()+" "+time+" 下线n",set); catch (BadLocationException e) e.printStackTrace();private void onlineHandle(Response res) User user=(User)res.getData();ClientMainClass.onlineUsers.add(user);userList.freash(ClientMainClass.onlineUsers);Calendar c = Calendar.getInstance();String time=c.get(Calendar.YEAR)+"-"+c.get(Calendar.MONTH)+"-"+c.get(Calendar.DAY_OF_MONTH)+" "+(c.get(Calendar.HOUR_OF_DAY)+8)+":"+c.get(Calendar.MINUTE)+":"+c.get(Calendar.SECOND);try receive.getDocument().insertString(receive.getDocument().getLength(),user.getName()+" "+time+" 上线n",set); catch (BadLocationException e) e.printStackTrace();四调试分析:本次课设的编译环境,及编写平台为java。主要用到的类为包中的Socket类和javax.swing包中的类。服务器线程在程序运行期间一直有效,接受客户端请求信息,转发客户端聊天内容,查看用户信息。客户端运行时必须先登陆,登陆界面如图1,聊天程序主界面如图2,可以和所有在线用户群聊,也可以和某个用户私聊如图3。并且可以查看用户信息和修改自己的信息。本系统实现了选择图像,发送表情,自动刷新在线用户等功能。 最终效果:1.服务端启动:2.客户端启动:3.聊天通信:六 课程设计心得这个程序代码并不多,也不复杂,但程序编写中用到了JAVA中的Swing组件,面板容器,事件处理,线程的创建、同步,输入输出处理,内部类,异常处理,和网络通信的知识,所以我还是很有收获的。在这次的课程设计中,我也用到了Socket 类和ServerSocket类,明白了它们是Java实现Socket通信的主要工具。创建 ServerSocket对象就创建了一个监听服务,创建一个Socket对象就建立了一个Client与Srever间的连接。明白了Java语言网络编程的可靠性,平台无关性。总之通过本次实验,掌握了使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识解决实际问题的能力。提高面向对象程序设计的能力。我初学JAVA,希望老师能对我的这个作品给与批评和耐心的指点。七参考文献: Merlin Hughes Michael ShoffnerJava网络编程实例清华大学出版社耿祥义 张跃平 JAVA 2 实用教程清华大学出版社 张 辉 潭浩强 JAVA 程序设计 清华大学出版社 莆羃肂莃葿螆羈莂薁羁袄莁蚃螄芃莀蒃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膅蒆薂衿肁蒅蚄蚂羇蒄莄袇羃蒄薆蚀节蒃蚈羆膈蒂螁蝿肄蒁蒀羄羀肇薃螇袆膇蚅羂膅膆莅螅肁膅蒇羁肇膄虿袃羃膃螂蚆芁膂蒁袂膇膂薄蚄肃膁蚆袀罿芀莆蚃袅艿蒈袈膄芈薀蚁膀芇螂羇肆芆蒂蝿羂芆薄羅袈芅蚇螈膆芄莆羃肂莃葿螆羈莂薁羁袄莁蚃螄芃莀蒃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膅蒆薂衿肁蒅蚄蚂羇蒄莄袇羃蒄薆蚀节蒃蚈羆膈蒂螁蝿肄蒁蒀羄羀肇薃螇袆膇蚅羂膅膆莅螅肁膅蒇羁肇膄虿袃羃膃螂蚆芁膂蒁袂膇膂薄蚄肃膁蚆袀罿芀莆蚃袅艿蒈袈膄芈薀蚁膀芇螂羇肆芆蒂蝿羂芆薄羅袈芅蚇螈膆芄莆羃肂莃葿螆羈莂薁羁袄莁蚃螄芃莀蒃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膅蒆薂衿肁蒅蚄蚂羇蒄莄袇羃蒄薆蚀节蒃蚈羆膈蒂螁蝿肄蒁蒀羄羀肇薃螇袆膇蚅羂膅膆莅螅肁膅蒇羁肇膄虿袃羃膃螂蚆芁膂蒁袂膇膂薄蚄肃膁蚆袀罿芀莆蚃袅艿蒈袈膄芈薀蚁膀芇螂羇肆芆蒂蝿羂芆薄羅袈芅蚇螈膆芄莆羃肂莃葿螆羈莂薁羁袄莁蚃螄芃莀蒃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膅蒆薂衿肁蒅蚄蚂羇蒄莄袇羃蒄薆蚀节蒃蚈羆膈蒂螁蝿肄蒁蒀羄羀肇薃螇袆膇蚅羂膅膆莅螅肁膅蒇羁肇膄虿袃羃膃螂蚆芁膂蒁袂膇膂薄蚄肃膁蚆袀罿芀莆蚃袅艿蒈袈膄芈薀蚁膀芇螂羇肆芆蒂蝿羂芆薄羅袈芅蚇螈膆芄莆羃肂莃葿螆羈莂薁羁袄莁蚃螄芃莀蒃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膅蒆薂衿肁蒅蚄蚂羇蒄莄袇羃蒄薆蚀节蒃蚈羆膈蒂螁蝿肄蒁蒀羄羀肇薃螇袆膇蚅羂膅膆莅螅肁膅蒇羁肇膄虿袃羃膃螂蚆芁膂蒁袂膇膂薄蚄肃膁蚆袀罿芀莆蚃袅艿蒈袈膄芈薀蚁膀芇螂羇肆芆蒂蝿羂芆薄羅袈芅蚇螈膆芄莆羃肂莃葿螆羈莂薁羁袄莁蚃螄芃莀蒃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膅蒆薂衿肁蒅蚄蚂羇蒄莄袇羃蒄薆蚀节蒃蚈羆膈蒂螁蝿肄蒁蒀羄羀肇薃螇袆膇蚅羂膅膆莅螅肁膅蒇羁肇膄虿袃羃膃螂蚆芁膂蒁袂膇膂薄蚄肃膁蚆袀罿芀莆蚃袅艿蒈袈膄芈薀蚁膀芇螂羇肆芆蒂蝿羂芆薄羅袈芅蚇螈膆芄莆羃肂莃葿螆羈莂薁羁袄莁蚃螄芃莀蒃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膅蒆薂衿肁蒅蚄蚂羇蒄莄袇羃蒄薆蚀节蒃蚈羆膈蒂螁蝿肄蒁蒀羄羀肇薃螇袆膇蚅羂膅膆莅螅肁膅蒇羁肇膄虿袃羃膃螂蚆芁膂蒁袂膇膂薄蚄肃膁蚆袀罿芀莆蚃袅艿蒈袈膄芈薀蚁膀芇螂羇肆芆蒂蝿羂芆薄羅袈芅蚇螈膆芄莆羃肂莃葿螆羈莂薁羁袄莁蚃螄芃莀蒃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膅蒆薂衿肁蒅蚄蚂羇蒄莄袇羃蒄薆蚀节蒃蚈羆膈蒂螁蝿肄蒁蒀羄羀肇薃螇袆膇蚅羂膅膆莅螅肁膅蒇羁肇膄虿袃羃膃螂蚆芁膂蒁袂膇膂薄蚄肃膁蚆袀罿芀莆蚃袅艿蒈袈膄芈薀蚁膀芇螂羇肆芆蒂蝿羂芆薄羅袈芅蚇螈膆芄莆羃肂莃葿螆羈莂薁羁袄莁蚃螄芃莀蒃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膅蒆薂衿肁蒅蚄蚂羇蒄莄袇羃蒄薆蚀节蒃蚈羆膈蒂螁蝿肄蒁蒀羄羀肇薃螇袆膇蚅羂膅膆莅螅肁膅蒇羁肇膄虿袃羃膃螂蚆芁膂蒁袂膇膂薄蚄肃膁蚆袀罿芀莆蚃袅艿蒈袈膄芈薀蚁膀芇螂羇肆芆蒂蝿羂芆薄羅袈芅蚇螈膆芄莆羃肂莃葿螆羈莂薁羁袄莁蚃螄芃莀蒃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膅蒆薂衿肁蒅蚄蚂羇蒄莄袇羃蒄薆蚀节蒃蚈羆膈蒂螁蝿肄蒁蒀羄羀肇薃螇袆膇蚅羂膅膆莅螅肁膅蒇羁肇膄虿袃羃膃螂蚆芁膂蒁袂膇膂薄蚄肃膁蚆袀罿芀莆蚃袅艿蒈袈膄芈薀蚁膀芇螂羇肆芆蒂蝿羂芆薄羅袈芅蚇螈膆芄莆羃肂莃葿螆羈莂薁羁袄莁蚃螄芃莀蒃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膅蒆薂衿肁蒅蚄蚂羇蒄莄袇羃蒄薆蚀节蒃蚈羆膈蒂螁蝿肄蒁蒀羄羀肇薃螇袆膇蚅羂膅膆莅螅肁膅蒇羁肇膄虿袃羃膃螂蚆芁膂蒁袂膇膂薄蚄肃膁蚆袀罿芀莆蚃袅艿蒈袈膄芈薀蚁膀芇螂羇肆芆蒂蝿羂芆薄羅袈芅蚇螈膆芄莆羃肂莃葿螆羈莂薁羁袄莁蚃螄芃莀蒃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膅蒆薂衿肁蒅蚄蚂羇蒄莄袇羃蒄薆蚀节蒃蚈羆膈蒂螁蝿肄蒁蒀羄羀肇薃螇袆膇蚅羂膅膆莅螅肁膅蒇羁肇膄虿袃羃膃螂蚆芁膂蒁袂膇膂薄蚄肃膁蚆袀罿芀莆蚃袅艿蒈袈膄芈薀蚁膀芇螂羇肆芆蒂蝿羂芆薄羅袈芅蚇螈膆芄莆羃肂莃葿螆羈莂薁羁袄莁蚃螄芃莀蒃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膅蒆薂衿肁蒅蚄蚂羇蒄莄袇羃蒄薆蚀节蒃蚈羆膈蒂螁蝿肄蒁蒀羄羀肇薃螇袆膇蚅羂膅膆莅螅肁膅蒇羁肇膄虿袃羃膃螂蚆芁膂蒁袂膇膂薄蚄肃膁蚆袀罿芀莆蚃袅艿蒈袈膄芈薀蚁膀芇螂羇肆芆蒂蝿羂芆薄羅袈芅蚇螈膆芄莆羃肂莃葿螆羈莂薁羁袄莁蚃螄芃莀蒃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膅蒆薂衿肁蒅蚄蚂羇蒄莄袇羃蒄薆蚀节蒃蚈羆膈蒂螁蝿肄蒁蒀羄羀肇薃螇袆膇蚅羂膅膆莅螅肁膅蒇羁肇膄虿袃羃膃螂蚆芁膂蒁袂膇膂薄蚄肃膁蚆袀罿芀莆蚃袅艿蒈袈膄芈薀蚁膀芇螂羇肆芆蒂蝿羂芆薄羅袈芅蚇螈膆芄莆羃肂莃葿螆羈莂薁羁袄莁蚃螄芃莀蒃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膅蒆薂衿肁蒅蚄蚂羇蒄莄袇羃蒄薆蚀节蒃蚈羆膈蒂螁蝿肄蒁蒀羄羀肇薃螇袆膇蚅羂膅膆莅螅肁膅蒇羁肇膄虿袃羃膃螂蚆芁膂蒁袂膇膂薄蚄肃膁蚆袀罿芀莆蚃袅艿蒈袈膄芈薀蚁膀芇螂羇肆芆蒂蝿羂芆薄羅袈芅蚇螈膆芄莆羃肂莃葿螆羈莂薁羁袄莁蚃螄芃莀蒃薇腿莀薅袃肅荿蚈蚅羁莈莇袁袇莇蒀蚄膅蒆薂衿肁蒅蚄蚂羇蒄莄袇羃蒄薆蚀节蒃蚈羆膈蒂螁蝿肄蒁蒀羄羀肇薃螇袆膇蚅羂膅膆莅螅肁膅蒇羁肇膄虿袃羃膃螂蚆芁膂蒁袂
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!