计算机网络课程设计白板共享课程设计.doc

上传人:laozhun 文档编号:2401490 上传时间:2023-02-17 格式:DOC 页数:21 大小:209.50KB
返回 下载 相关 举报
计算机网络课程设计白板共享课程设计.doc_第1页
第1页 / 共21页
计算机网络课程设计白板共享课程设计.doc_第2页
第2页 / 共21页
计算机网络课程设计白板共享课程设计.doc_第3页
第3页 / 共21页
计算机网络课程设计白板共享课程设计.doc_第4页
第4页 / 共21页
计算机网络课程设计白板共享课程设计.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《计算机网络课程设计白板共享课程设计.doc》由会员分享,可在线阅读,更多相关《计算机网络课程设计白板共享课程设计.doc(21页珍藏版)》请在三一办公上搜索。

1、计算机网络课程设计 信息安全09级1班小组成员: 课程设计指导教师评定成绩表(学生姓名:吴丹 学号: 20095633)项目分值优秀(100x90)良好(90x80)中等(80x70)及格(70x60)不及格(xx90)良好(90x80)中等(80x70)及格(70x60)不及格(x60)评分参考标准参考标准参考标准参考标准参考标准学习态度15学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作学习态度尚可,能遵守组织纪律,能按期完成任务学习马虎

2、,纪律涣散,工作作风不严谨,不能保证设计时间和进度技术水平与实际能力25设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信设计基本合理,理论分析与计算无大错,实验数据无大错设计不合理,理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问

3、题创新10有重大改进或独特解,有一定实用值有较大改进或新颖解,实用性尚可有一定改进或新的见解有一定见解观念陈旧论文(计算书、图纸)撰写质量50结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化求,书写工整或用计算机打印成文;图纸非常工整、清晰结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求书写工整或用计算机打印成文;图纸工整、清晰结构合理,层次较为分明,文理通顺,基本达到规范化求,书写比较工整;图纸比较工整、清晰结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不

4、清晰指导教师评定成绩:指导教师签名: 年 月 日重庆大学本科学生课程设计任务书课程设计题目计算机网络课程设计学院计算机学院专业信息安全年级2009已知参数和设计要求:通过计算机网络的课程设计,使学生了解、掌握TCP、UDP协议的原理;了解、掌握利用Winsock API编程的方法;了解、掌握应用协议设计的思想;利用Winsock API编制一个能部署在Internet上的点对点数据交换(P2P)、HTTP/FTP服务器系统、共享白板。要求每组学生(23人/组)从上述3个系统中任选一个,独立完成系统的功能设计和实现,使所实现的系统可以能够包含主要的内容要求,并要求学生必须在报告中明确具体分工情况

5、。学生应完成的工作:分组 23人/组。 内容:协议编程。语言:Java或C+。3个题目任意两个一组供一个班级选择。1) 点对点数据交换(P2P):实现基于服务器转发的任意多点间的数据共享与交换。2) HTTP/FTP服务器系统:HTTP/FTP客户端系统和HTTP/FTP服务端系统。3) 共享白板:实现基于服务器转发的多点间的文字,简单图案等信息的远程实时共享。目前资料收集情况(含指定参考资料):1) 计算机网络第4版 谢希仁 电子工业出版社 2003年.6月2) 用TCP/IP进行网络互联(第一卷)D.E.Comer 电子工业出版社2004年.11月第四版3) TCP/IP网络原理与技术 周

6、明天、汪文勇:清华大学出版社:19934) Visual C+网络高级编程,陈坚,人民邮电出版社,2001年08月课程设计的工作计划:1需求分析(说明系统目的,要求,操作流程,开发工具与开发平台)2总体设计(描述系统功能,系统架构,模块化分)3详细设计(建立系统的数据结构,协议结构,数据流程图)4系统实现编码(用所选开发工具完成应用系统)任务下达日期 2012 年 1 月 9 日完成日期 2012 年 1 月 12 日指导教师 (签名)学 生 (签名)说明:1、学院、专业、年级均填全称,如:光电工程学院、测控技术、2003。2、本表除签名外均可采用计算机打印。本表不够,可另附页,但应在页脚添加

7、页码。一 需求分析随着Internet的迅速普及,计算机技术进入了以网络为中心的时代。在计算机网络的支持下。地理上分布的人们需要协同工作。因此计算机支持协同工作(CSCW)应运而生。人们希望借助协同工作环境以“你见即我见”的方式进行交互。而电子白板作为计算机支持协同工作(CSCW)中的一个重要的图形交互工具,使处于不同地点的用户通过计算机可以实时的进行图形交互,用户简单快速地实现协同工作,业务处理过程,迅速适应市场的变化,从而获得更好的经济效益。本系统将CSCW与Java技术相结合,采用Java语言中的Socket网络编程技术,实现了客户端与服务器端之间网络底层的链接和信息的交换,用C/S计算

8、机模型设计并实现了一个基于Java的电子白板系统,增加传简单图案功能,弥补了纯文本非实时交流的不足,简化了网络中的技术细节,方便可行。(1)系统目的我们小组做的题目是共享白板:实现基于服务器转发的多点间的文字,简单图案等信息的远程实时共享,具体来说,我们的目标是做一个简单的局域网聊天程序,要实现的功能如下: 用户应该可以选择昵称登录服务器。 实现多对多聊天,并能传送简单图案。 客户端程序应该可以实时显示目前该服务器的信息。 有一个简单,便于操作的界面。(2)要求所有客户端具能够接收到其它任意客户的信息,包括文字信息和简单图案信息。(3) 操作流程客户端与服务器端通信流程(4) 数据流通 服务器

9、启动,等待客户端连接。 多个客户端连接服务器。 A输入消息,存储到socket的输出流里,传给服务器的输入流。 服务器将输入流里的信息添加到vector里。 服务器将vector的信息传给所socket 的输出流里。 所有客户端从自己的输入流里接收信息,存储在vector里。 将vector的信息写在共享白板里。(5)开发工具与开发平台 开发语言:JAVA 开发环境:eclipse 3.7 indigo ,Windows 7二 总体设计(1) 系统功能该系统的主要功能是实现多个用户之间在同一服务器上的客户之间的数据共享。是基于服务器转发的。采用线程池技术,每发起一个连接,就创建一个线程,连接结

10、束后,线程结束。(2)系统架构采用C/S模式,各个用户通过服务器转发实现共享白板聊天的功能(3)模块划分分为两大模块:客户端模块和服务器端模块。1)客户端模块的主要功能: 登陆功能:用户可以选择昵称登录服务器。 接收信息:能接收其他所有用户发出的信息。 发送信息:能发出用户要发出的信息。2)服务器端模块的主要功能: 转发聊天信息:将消息转发给所有在线的用户。 显示用户退出消息。三 详细设计(1)系统数据结构1、服务器:负责处理各个客户端的信息,并负责将信息进行转发。、 服务器主要负责响应客户端的的各种信息,包括用户的登陆,客户端的信息的转发。、 服务器的实现有以下几个类构成:AppServer

11、类,Connect类,Start类。其中AppServer类主要是进行初始化的工作,Connect类负责对各个客户端信息的处理。Start类用于启动服务器和服务器的简单界面设计。2、 客户端:用户使用界面,负责接受信息以及与服务器进行通信。、 客户端负责为用户提供登陆界面,将信息发送至服务器,接受服务器的反馈信息等一系列的工作。、 客户端的实现有以下几个类构成:clientInt类,TimerAction类,Login类。clientInt类进行客户端初始化的工作和与其它客户端进行通信,TimerAction类用于显示服务器消息,Login类用于用户选择昵称登录客户端。(2) 协议结构 程序采

12、用TCP协议 TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在简化的计算机网络ISO协议中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。 在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的运输层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。 应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文

13、段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算和校验。 实验效果图1启动服务器:服务器端运行时,弹出启动服务器界面,点击“启动服务器”按钮,服务器启动。2用户选择昵称登录:客户端

14、运行时,弹出用户登陆界面,输入自己的昵称,在共享白板里作为本机的名字,点登陆按钮,启动共享白板界面。3用户交流共享白板界面,所有客户端的聊天及表情均显示在共享白板里,当有客户端推出时显示某客户端推出提示。四 参考文献【1】计算机网络第4版 谢希仁 电子工业出版社 2003年.6月【2】用TCP/IP进行网络互联(第一卷)D.E.Comer 电子工业出版社2004年.11月第四版【3】TCP/IP网络原理与技术 周明天、汪文勇:清华大学出版社:1993【4】JAVA程序设计之网络编程 李芝兴、杨瑞龙 清华大学出版社 2006年3月五 系统编码实现服务器代码:AppServer.javaimpor

15、t java.awt.event.*;import .*;import java.io.*;import java.util.*;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.Timer;/AppServer类代码public class AppServer implements RunnableServerSocket server;/ 创建绑定到特定端口的服务器套接字Socket fromClient;Thread serverThread;

16、public static final int PORT = 8080;public AppServer() try server = new ServerSocket(PORT);/创建一个ServerSocket在端口PORT监听客户请求serverThread = new Thread(this); / 创建AppServer的线程实例serverThread.start();/启动线程 catch (Exception e) System.out.println(不能启动该线程: + e);/出错,打印出错消息/ 构造AppServer结束public void run() try w

17、hile (true) / 监听客户端的请求fromClient = server.accept();/使用accept()阻塞等待客户请求Connect con = new Connect(fromClient); catch (Exception e) System.out.println(不能监听客户请求 + e);/出错,打印出错消息public static void main(String args) new Start();/ Start类用于启动服务器class Start extends JFrame implements ActionListenerJFrame f=new

18、 JFrame(服务器);JButton b=new JButton(启动服务器);JLabel l=new JLabel(服务器尚未启动);public Start()f.setSize(300, 200);f.setLayout(null);f.add(b);b.setBounds(90, 30, 100, 40);f.add(l);l.setBounds(90, 80, 200, 30);f.setLocation(400, 200);f.setVisible(true);b.addActionListener(this);public void actionPerformed(Acti

19、onEvent e) new AppServer();/启动服务器l.setText(服务器已启动);b.setEnabled(false);/ connect类代码class Connect ObjectOutputStream streamToClient;BufferedReader streamFromClient;boolean status = false;static Vector vector;/ 白板信息String message = ;static vector = new Vector(1, 1);/初始容量为1,每次扩充1public Connect(Socket i

20、nFromClient) / 提取客户端的流String msg = ;try streamFromClient = new BufferedReader(new InputStreamReader(inFromClient.getInputStream();/由Socket对象得到输入流,并构造相应的BufferedReader对象streamToClient = new ObjectOutputStream(inFromClient.getOutputStream();/由Socket对象得到输出流,并构造ObjectOutputStream对象msg = streamFromClient

21、.readLine();if (msg.equals(Timer) / 更新信息streamToClient.writeObject(vector); else message = message + msg;vector.addElement(String) message);streamToClient.writeObject(vector);/ end of trycatch (Exception e) System.out.println(无法获取客户端的流对象 + e);/出错,打印出错消息 finally / 关闭套接字try inFromClient.close(); catch

22、 (IOException e) 2客户端代码ClientInt.javaimport java.io.*;import .*;import javax.swing.*;import java.awt.event.*;import java.awt.*;import java.util.*;import javax.swing.Timer;public class ClientInt extends JFrame implements ActionListener, MouseListener Timer t = new Timer(0, new TimerAction();String us

23、r_name;/ InetAddress IPadr = InetAddress.getByAddress(127,0,0,1);String IPadr = localhost;/ TimerAction类用于显示服务器消息class TimerAction implements ActionListener Socket toServer;ObjectInputStream streamFromServer;PrintStream streamToServer;public void actionPerformed(ActionEvent e2) try toServer = new So

24、cket(IPadr, AppServer.PORT);streamFromServer = new ObjectInputStream(toServer.getInputStream();streamToServer = new PrintStream(toServer.getOutputStream();message = txtMsg.getText();/ 向服务器发送一消息streamToServer.println(Timer);/ 从服务器端接收Vector向量Vector vector = (Vector) streamFromServer.readObject();/ 显示该

25、消息int i = messageCount;for (; i vector.capacity(); i+) String s = txtMessages.getText(); / 显示消息txtMessages.setText(s + (String) vector.elementAt(i) + n);messageCount = i; catch (Exception e) / System.out.println(产生异常 + e);/出错,打印出错信息int messageCount = 0; / 消息数量PrintStream streamToServer;/ 构造PrintStre

26、am对象ObjectInputStream streamFromServer;/ 构造ObjectInputStreamSocket toServer;/ 构造Socket对象final JTextPane txtMessages = new JTextPane();/ 共享白板final JTextPane txtMsg = new JTextPane();/ 用户发送的消息JButton msgSendBtn;/ 发送消息按钮JButton userLogoutBtn;/ 退出按钮JButton b1, b2, b3, b4, b5;/ 图片按钮JLabel lblChatRoom;/ 共

27、享白板JScrollPane jspSendMsgPane;/ 滚动条JScrollPane jspTxtMsgPane;/ 滚动条String message;/ 简单图案信息ImageIcon image1 = new ImageIcon(D:1.jpg);ImageIcon image2 = new ImageIcon(D:2.jpg);ImageIcon image3 = new ImageIcon(D:3.jpg);ImageIcon image4 = new ImageIcon(D:4.jpg);ImageIcon image5 = new ImageIcon(D:5.jpg);p

28、ublic ClientInt(String nm) usr_name = nm;this.setTitle(用户: + usr_name);this.addMouseListener(this);/ 添加监听器/ 以下为设置客户端界面JPanel panel = new JPanel();panel.setLayout(null);Calendar c = Calendar.getInstance();String name = 共享白板,您的昵称为: + usr_name + 今天是 + c.get(Calendar.YEAR)+ 年 + c.get(Calendar.MONTH) + 1

29、 + 月 + c.get(Calendar.DATE)+ 日;/显示日期lblChatRoom = new JLabel(name, SwingConstants.LEFT);panel.add(lblChatRoom);lblChatRoom.setBounds(100, 0, 500, 50);txtMessages.setEditable(false);jspTxtMsgPane = new JScrollPane(txtMessages,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_A

30、S_NEEDED);panel.add(jspTxtMsgPane);jspTxtMsgPane.setBounds(50, 50, 450, 300);jspSendMsgPane = new JScrollPane(txtMsg,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);panel.add(jspSendMsgPane);jspSendMsgPane.setBounds(50, 375, 250, 100);msgSendBtn = new JButton(发送)

31、;panel.add(msgSendBtn);msgSendBtn.setBounds(350, 375, 70, 50);msgSendBtn.addActionListener(this);userLogoutBtn = new JButton(退出);panel.add(userLogoutBtn);userLogoutBtn.setBounds(100, 480, 70, 50);userLogoutBtn.addActionListener(this);b1 = new JButton();panel.add(b1);b1.setIcon(Icon) image1);b1.setBo

32、unds(200, 480, 50, 50);b1.addActionListener(this);b2 = new JButton();panel.add(b2);b2.setIcon(Icon) image2);b2.setBounds(270, 480, 50, 50);b2.addActionListener(this);b3 = new JButton();panel.add(b3);b3.setIcon(Icon) image3);b3.setBounds(340, 480, 50, 50);b3.addActionListener(this);b4 = new JButton()

33、;panel.add(b4);b4.setIcon(Icon) image4);b4.setBounds(410, 480, 50, 50);b4.addActionListener(this);b5 = new JButton();panel.add(b5);b5.setIcon(Icon) image5);b5.setBounds(480, 480, 50, 50);b5.addActionListener(this);/ 向窗体添加事件侦听器this.addWindowListener(new WindowAdapter() public void windowClosing(Windo

34、wEvent e1) try Socket toServer;ObjectInputStream streamFromServer;PrintStream streamToServer;toServer = new Socket(IPadr, AppServer.PORT);streamToServer = new PrintStream(toServer.getOutputStream();Date d = new Date();streamToServer.println(d.getHours() + : + d.getMinutes()+ : + d.getSeconds() + + u

35、sr_name+ 退出了共享白板。);/ try块尾catch (Exception e2) System.out.println(发生异常: + e2););getContentPane().add(panel);setDefaultCloseOperation(EXIT_ON_CLOSE);setSize(560, 580);Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();setLocation(screen.width - 560) / 2, (screen.height - 580) / 2);setVisi

36、ble(true);setResizable(false);t.start();public void actionPerformed(ActionEvent e1) JButton button = (JButton) e1.getSource();/ 若单击退出按钮,触发此事件if (button.equals(userLogoutBtn) try toServer = new Socket(IPadr, AppServer.PORT);streamToServer = new PrintStream(toServer.getOutputStream();/ 退出时,向服务器发送退出消息D

37、ate d = new Date();streamToServer.println(d.getHours() + : + d.getMinutes()+ : + d.getSeconds() + + usr_name + 退出了共享白板。); catch (Exception e) System.out.println(发生异常: + e);this.dispose(); else if (button.equals(b1) String s1 = new String();s1 = txtMsg.getText();txtMsg.setText(s1 + /1); else if (butt

38、on.equals(b2) String s1 = new String();s1 = txtMsg.getText();txtMsg.setText(s1 + /2); else if (button.equals(b3) String s1 = new String();s1 = txtMsg.getText();txtMsg.setText(s1 + /3); else if (button.equals(b4) String s1 = new String();s1 = txtMsg.getText();txtMsg.setText(s1 + /4); else if (button.

39、equals(b5) String s1 = new String();s1 = txtMsg.getText();txtMsg.setText(s1 + /5);/ 若单击“发送”按钮else if (button.equals(msgSendBtn) try toServer = new Socket(IPadr, AppServer.PORT);streamFromServer = new ObjectInputStream(toServer.getInputStream();streamToServer = new PrintStream(toServer.getOutputStream();message = txtMsg.getText();String msg = message;/ 发送用户名和用户输入的聊天信息Date d = new Date();streamToServer.println(d.g

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号