计算机网络课程设计报告书4542816318.doc

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

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

1、学 号: 武汉理工大学华夏学院课 程 设 计题 目计算机网络课程设计系 别信息工程专 业软件技术班 级姓 名成 绩2011年01月 13 日课程设计任务书学生姓名: 专业班级: 题 目: 简单的聊天软件(c/s) 目录一、设计目的3二、设计任务3三、时间安排3四、具体设计过程和步骤(以协议验证编程为例)34.1 需求分析34.1.1项目描述34.1.2系统需求44.2套接字介绍与使用44.3 流程分析与设计44.4 项目基本步骤54.4.1创建项目以及基本的包54.4.2创建项目的基本类54.5 编码64.6 系统实施与运行184.6.1服务器启动与关闭窗体视图184.6.2客户端产生视图18

2、4.6.3服务器聊天窗口、客户机聊天窗口184.6.4服务器与客户机交互194.6.4 cmd模式telnet服务器进行和交互20五、设计心得体会21六、设计过程中的疑问21七、指导教师评语22一、 设计目的通过本课程设计,培养学生具有C/S或B/S式的网络应用系统的设计和开发以及中小规模组网能力;掌握常用网络开发工具(如VB、VC)的使用,或掌握web开发工具(如ASP等)的方法与网络规划、设计、集成的步骤和方法;使同学们经历网络应用系统开发及网络集成的全过程和受到一次综合训练,以便能较全面地理解、掌握和综合运用所学的知识,在实践中培养分析问题和解决问题的能力。并为毕业设计打下坚实的基础。通

3、过分析设计和实现,可以使理论知识得到验证并且能够了解基本网络开发的方法、步骤,细节,提高动手能力。二、 设计任务1. 实现简单的客户端发送信息、服务器端收信息。2. 实现简单的服务器端发送信息、客户端收信息3. 实现客户端请求关闭连接,服务器作出相应4. 编程模拟实现telnet5. 获取主机名和IP地址三、 时间安排01月10日,查阅资料,确定设计题目;01月11日,分析题目,创建工程,准备程序;01月12日,封装代码,上机调试程序;01月13日,提交课程设计报告;四、 具体设计过程和步骤(以协议验证编程为例)4.1 需求分析4.1.1项目描述 在信息网络高速发展的今天,网上聊天已成为了我们

4、每天生活、工作必不可少的一部分,如QQ、飞鸽、UC等聊天工具的普及。聊天工具为我们的生活和学习带来了很多方便,在这里我做了一个简单的网络聊天软件神话聊天室,实现了一些基本的服务器与客户端的相互交流和请求,本项目编写简单,易于移植,交流方便。本项目主要实现的功能是利用网络知识套接字(ip地址+端口号),实现服务器和客户端的基本通信功能,并且服务器可以实现同时与多台客户端通信交流。本项目利用Java知识、借助MyEclipse开发平台,写了一个服务器端和一个客户端,可以将这个客户端移植到别的机器上与本机实现多对一的交流,同时客户端也可以在自己利用远程登陆的方式(开始运行cmdtelnet 服务器i

5、p 服务器端口号),与服务器进行交流。4.1.2系统需求1. 问题描述利用Myeclipse平台,设计出简洁, 用户友好的聊天界面及方便灵活的客户端与服务器之间的交流,能完成基本的一对一用户交流、一对多用户交流,客户端与服务器之间的相互请求关闭连接的操作。该系统主要包括服务器端和客户端两部分:服务器端:利用Java知识ServerSocket类定义一个服务器端端口new ServerSocket(int iport),然后不但让服务器端端口产生监听,利用多线程知识定义一个线程类,让每接受到一个监听就给服务器产生一个聊天窗口,直至聊天结束就关闭此窗口。客户端:利用 Java 知识Socket类定

6、义一个客户端 端口new Socket( String ip,int iport),此ip为服务器端主机的ip地址,端口号为服务器端服务器定义的端口号,然后让客户端启动,这样客户端就会就请一次服务器,服务器接受到一个监听就给服务器产生一个与之对应的聊天窗口,两者进行聊天,直至哪一方要求结束聊天就关闭窗体。2. 显示服务器与客户机的ip和主机名利用Java中的getLocalAddress().getHostName()和getInetAddress();3. 项目视图的建立 利用Java SE 知识采用Java中swing包控件,创建一个启动服务器的窗体(见图4)、一个启动客户端的窗体(见图6

7、)、一个服务器端的聊天窗体(见图8)、一个客户端的聊天窗体(见图8)。4.2套接字介绍与使用 多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCPIP协议交互提供了称为套接字(Socket)的接口。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCPIP协议交互提供了称为套接字(Socket)的接口。套接字简介:套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机的间的进程进行双向通信的端面

8、点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程4.3 流程分析与设计启动服务器ServerSocket ss产生服务器端聊天窗口产生监听Socket s=ss.accept()启动客户端输入服务器端主机ip+Porttruefalsetruefalse产生客户端聊天窗口进行相互交流图1 主要流程图4.4 项目基本步骤4.4.1创建项目以及基本的包打开MyEclipse,新建Java project工程,取名为ChatRoom,图2; 在src下新建包edu.huaxia.chatserver、edu.huaxia.chatclient,图3; 图2 图3 4.4.2创

9、建项目的基本类1. 创建启动服务器视图类TcpServeView.java,代码见4.5编码12. 创建线程服务器类TcpSession.java,代码见4.5编码23. 创建服务器端聊天窗口视图类ChatWindowSerevrView.java,代码见4.5编码34. 创建启动客户端视图类ClientView.java,代码见4.5编码45. 创建客户端聊天窗口视图类TcpClient.java,代码见4.5编码54.5 编码1. TcpServeView.java代码:package edu.huaxia.chatserver;import java.aw*;import java.io

10、.IOException;import .ServerSocket;import .Socket;import javax.swing.*;/* * author Thomas *服务器端窗体:开始和停止服务 */public class TcpServerView extends JFrameprivate static final long serialVersionUID = 1L;private ServerSocket ss;private JButton start,stop;public TcpServerView()super(服务器窗体);try ss = new Serve

11、rSocket(6666);/给服务器绑定一个端口 catch (IOException e1) e1.printStackTrace();start = new JButton(启动服务器);/开始按钮监听事件启动服务器start.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) start.setVisible(false);/启动后设置开始按钮不可见/如果停止按钮是不可见时,启动后设置停止按钮可见if (stop.isVisible()=false) stop.setVisib

12、le(true);this.start();/调用内部类的start方法/* * 内部类方法,监听一个端口,并产生一个线程 */private void start() try Socket socket=ss.accept();new TcpSession(socket).start();/让线程开启 this.start(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace(););stop = new JButton(关闭服务器);stop.setVisible(false);/最初时设置停

13、止按钮不见/停止按钮监听事件停止服务器stop.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) this.close();/调用内部类的close方法/如果开始按钮是不可见时,启动后设置开始按钮可见if (start.isVisible()=false) start.setVisible(true);/设置停止按钮不可见stop.setVisible(false);/* * 内部类方法,关闭端口 */private void close() try if(ss!=null)/如果端

14、口不为空,就关闭该端口ss.close(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace(););this.add(start);this.add(stop);this.setLayout(null);this.setBackground(Color.LIGHT_GRAY);this.setBounds(150, 150, 300, 300);this.setVisible(true);start.setBounds(100, 75, 100, 50);stop.setBounds(100,

15、155, 100, 50);public static void main(String args) /主方法,调用自己,产生图形化用户界面new TcpServerView();2. TcpSession.java代码:package edu.huaxia.chatserver;import java.io.*;import .Socket;import edu.huaxia.chatView.ChatWindowServerView;/* * author Thomas *对服务器产生的线程进行处理 */public class TcpSession extends Thread priv

16、ate Socket socket;private BufferedReader br;private PrintStream ps;public TcpSession(Socket s) this.socket = s;try /定义端口的输入输出流br=new BufferedReader(new InputStreamReader(socket.getInputStream();ps=new PrintStream(socket.getOutputStream(); catch (IOException e) e.printStackTrace();/* * 流的关闭方法 */publi

17、c void close()try if(br!=null) br.close();if(ps!=null) ps.close();if(socket!=null) socket.close(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();/* * 线程的启动方法 */public void run() /产生一个图形化聊天界面ChatWindowServerView cws = new ChatWindowServerView(socket,br,ps);cws.dopost();/调

18、用cws的dopost方法cws.close();/调用cws的close方法cws.dispose();/将这个聊天窗体摧毁this.close();/调用自己关闭流的方法close3. ChatWindowSerevrView.java代码:package edu.huaxia.chatView;import java.io*;import .Socket;import java.text.SimpleDateFormat;import java.util.Date;import javax.swing.*;/* * author Thomas *用户聊天窗体 */public class

19、 ChatWindowServerView extends JFrame implements ActionListenerprivate static final long serialVersionUID = 1L;private JLabel l1,l2,l3,l4;private JPanel p1,p2,p3,p4,p5;private TextArea ta1,ta2;private JButton send,quit;private BufferedReader br;private PrintStream ps;private boolean b=true;/* * 构造器对窗

20、体属性的基本定义 */public ChatWindowServerView(Socket socket,BufferedReader br,PrintStream ps)super(神话聊天室服务器);this.br=br;this.ps=ps;l1 = new JLabel(客户IP:+socket.getLocalAddress();l3 = new JLabel(客户名字:+socket.getLocalAddress().getHostName();l2 = new JLabel(主机IP:+socket.getInetAddress();l4 = new JLabel(主机名字:+

21、socket.getInetAddress().getHostName();Border b1 = BorderFactory.createTitledBorder(聊天信息显示窗体);Border b2 = BorderFactory.createTitledBorder(发送信息窗体);Border b3 = BorderFactory.createTitledBorder(对方基本信息);Border b4 = BorderFactory.createTitledBorder(本人基本信息);p1 = new JPanel();p1.setBorder(b1);p2 = new JPan

22、el();p2.setBorder(b2);p3 = new JPanel();p3.setBorder(b3);p4 = new JPanel();p4.setBorder(b4);p5 = new JPanel();ta1 = new TextArea(10,47);ta2 = new TextArea(11,67);Font f = new Font(Default,Font.PLAIN,18);ta1.setFont(f);ta1.setForeground(Color.RED);send = new JButton(发送);send.addActionListener(this);/

23、产生监听quit = new JButton(关闭);quit.addActionListener(this);/产生监听this.setLayout(null);this.add(p1);this.add(p2);this.add(p3);this.add(p4);this.add(p5);p1.add(ta1);p2.add(ta2);p3.add(l1);p3.add(l3);p4.add(l2);p4.add(l4);p5.add(send);p5.add(quit);this.setBounds(100,100, 720, 600);p1.setBackground(Color.gr

24、ay);p1.setBounds(0, 0, 500, 280);p3.setBackground(Color.white);p3.setBounds(505, 0, 190, 280);l1.setBounds(507, 5, 187, 30);l2.setBounds(507, 37, 187, 30);p2.setBackground(Color.PINK);p2.setBounds(0, 290, 500, 220);p4.setBackground(Color.LIGHT_GRAY);p4.setBounds(505, 290, 190, 220);l2.setBounds(507,

25、 295, 187, 30);l4.setBounds(507, 327, 187, 30);p5.setBounds(0, 520, 500, 40);this.setVisible(true);/* * 对监听事件的处理 */public void actionPerformed(ActionEvent e) /发送按钮事件。当发送文本框的值不为空时,就将信息发送为输出流,同时在信息框中打印出来if(e.getSource().equals(send) String s1=null;s1=ta2.getText().trim();if(!s1.equals()ta2.setText();/

26、对时间对象的处理SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd hh:mm:ss);Date date = new Date();/如果得到的是quit就返回方法 if(quit.equalsIgnoreCase(s1) ta1.append(服务器+sdf.format(date)+:+要求断开连接); ps.println(+sdf.format(date)+:+要求断开连接); return; ps.println(+sdf.format(date)+:+s1); ta1.append(服务器+sdf.format(date)

27、+:+s1+n); ps.flush();else if(e.getSource()=quit)/发送按钮事件。将“quit”信息发送为/输出流,同时将b设置为falseps.println(quit);b=false;/* * 接受输入流的信息 */public void dopost()try String s=null;SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd hh:mm:ss);Date date = new Date();ps.println(+sdf.format(date)+:你好,欢迎光临神话聊天室!);whi

28、le(b)s=br.readLine();if(s!=null|s!=)if(quit.equalsIgnoreCase(s) /若得到的是quit就返回ta1.append(客户+sdf.format(date)+要求断开连接!n);return;ta1.append(客户+s+n); catch (IOException e) e.printStackTrace();/* * 流的关闭窗体 */public void close()try if(br!=null) br.close();if(ps!=null) ps.close(); catch (IOException e) / TOD

29、O Auto-generated catch blocke.printStackTrace();4. ClientView.java代码:package edu.huaxia.chatclient;import java.awt.*;import java.io.IOException;import .Socket;import .UnknownHostException; /* * author Thomas *启动客户端的窗体 */public class ClientView extends JFrame private static final long serialVersionUI

30、D = 1L;private JLabel l0,l1,l2;private JTextField ip,port;private JButton start;public ClientView()super(客户端启动);l0 = new JLabel(套接字信息);l1 = new JLabel(服务器IP:);l2 = new JLabel(服务器port:);ip = new JTextField();port = new JTextField();start = new JButton(产生客户端);/产生监听,实例化内部类start.addActionListener(new Ac

31、tionListener()public void actionPerformed(ActionEvent e) String ip1 = ip.getText();int port1 = Integer.parseInt(port.getText();Socket socket = null;try /定义套接字:ip+端口号socket = new Socket(ip1,port1);TcpClient tc = new TcpClient(socket);tc.post();tc.close();tc.dispose(); catch (UnknownHostException e1)

32、JOptionPane.showMessageDialog(null, 套接字错误!); catch (IOException e3) JOptionPane.showMessageDialog(null, 套接字错误!);try socket.close(); catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace(););Font font = new Font(华文楷体,Font.PLAIN,18);l0.setFont(font);l0.setForeground(Color.RED);thi

33、s.add(start);this.add(l0);this.add(l1);this.add(l2);this.add(ip);this.add(port);this.setLayout(null);this.setBackground(Color.LIGHT_GRAY);this.setBounds(150, 150, 300, 300);this.setVisible(true);l0.setBounds(100, 15, 100, 30);l1.setBounds(55, 55, 60, 30);ip.setBounds(135, 55, 100, 30);l2.setBounds(5

34、5, 105, 70, 30);port.setBounds(135, 105, 100, 30);start.setBounds(100, 155, 100, 30);public static void main(String args) new ClientView();5. TcpClient.java代码:package edu.huaxia.chatclient;import java.awt.*;import java.io*import .Socket;import .UnknownHostException;import java.text.SimpleDateFormat;

35、import java.util.Date;import javax.swing.*;/* * author Thomas * 客户端窗体 */public class TcpClient extends JFrame implements ActionListenerprivate static final long serialVersionUID = 1L;private JLabel l1,l2,l3,l4;private JPanel p1,p2,p3,p4,p5;private TextArea ta1,ta2;private JButton send,quit;private B

36、ufferedReader br;private PrintStream ps;private Socket socket;private boolean b=true;/* * 客户端窗体的基本属性 */public TcpClient(Socket socket)super(神话聊天室客户端);this.socket = socket;try /定义套接字输入输出流br = new BufferedReader(new InputStreamReader(socket.getInputStream();ps = new PrintStream(socket.getOutputStream(

37、);catch (IOException e) e.printStackTrace();l2 = new JLabel(客户IP:+socket.getLocalAddress();l4 = new JLabel(客户名字:+socket.getLocalAddress().getHostName();l1 = new JLabel(主机IP:+socket.getInetAddress();l3 = new JLabel(主机名字:+socket.getInetAddress().getHostName();Border b1 = BorderFactory.createTitledBord

38、er(聊天信息显示窗体);Border b2 = BorderFactory.createTitledBorder(发送信息窗体);Border b3 = BorderFactory.createTitledBorder(对方基本信息);Border b4 = BorderFactory.createTitledBorder(本人基本信息);p1 = new JPanel();p1.setBorder(b1);p2 = new JPanel();p2.setBorder(b2);p3 = new JPanel();p3.setBorder(b3);p4 = new JPanel();p4.se

39、tBorder(b4);p5 = new JPanel();ta1 = new TextArea(10,47);ta2 = new TextArea(11,67);Font f = new Font(Default,Font.PLAIN,18);ta1.setFont(f);ta1.setForeground(Color.RED);send = new JButton(发送);send.addActionListener(this);/产生监听quit = new JButton(关闭);quit.addActionListener(this);/产生监听this.setLayout(null

40、);this.add(p1);this.add(p2);this.add(p3);this.add(p4);this.add(p5);p1.add(ta1);p2.add(ta2);p3.add(l1);p3.add(l3);p4.add(l2);p4.add(l4);p5.add(send);p5.add(quit);this.setBounds(100,100, 720, 600);p1.setBackground(Color.orange);p1.setBounds(0, 0, 500, 280);p3.setBackground(Color.PINK);p3.setBounds(505, 0, 190, 280);l1.setBounds(507, 5, 187, 30);l2.setBounds(507, 37, 187, 30);p2.setBackground(Color.darkGray);p2.setBounds(0, 290, 500, 220);p4.setBackground(Color.LIGHT_GRAY);p4.setBounds(505, 290, 190, 220);l2.setBounds(507, 295, 187, 30);l4.setBounds(50

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号