




已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 实 验 报 告 课程名称: 专业班级:计算机科学与技术 1003 班 学 号: 姓 名: 鲁辰 指导教师: 报告日期: 2013.05.06 计算机科学与技术学院 目 录 1 实验二 Socket 编 程(E-Mail ) .3 1.1 实验目的 .3 1.2 实验要求 .3 1.3 实验内容 .3 1.4 实验过程 .4 1.4.1 需求分析 4 1.4.2 界面 5 1.4.3 写信 7 1.4.4 收信 12 1.5 实验体会 .18 2 实验 2 网络组建与实施 .18 2.1 实验目的 .18 2.2 实验环境、要求 .18 2.2.1 实验实验环境 18 2.2.2 实验要求 .18 2.3 实验内容 18 2.3.1 实验 1 组网实验 18 2.3.2 实验 2 路由配置实验 .19 2.3.3 实验 3 VLAN 划分实验 20 2.3.4 实验 4 访问控制配置实验 .21 2.4 实验过程 .21 2.4.1 系统的安装与配置 21 2.4.2 实验 1 组网实验 .22 2.4.3 实验 2 路由配置实验 .32 2.4.4 实验 3 VLAN 划分实验 44 2.4.5 实验 4 访问控制配置实验 .47 2.5 实验体会 .50 3 1 实验二 Socket 编 程(E-Mail) 1.1 实验目的 了解应用层和运输层的作用及相关协议的工作原理和机制。 掌握 SOCKET 编程的基本方法。 1.2 实验要求 必须基于 Socket 编程,不能直接借用任何现成的组件。 提交实验设计报告和源代码;实验设计报告必须包括程序流程,源代码必 须加详细注释。 基于自己的实验设计报告,通过实验课的上机试验,在 TurboC 2.0(或者 Visual C+ 6.0 或者 Java)编程环境下将源代码 编译成功,运行演示给实验指导教师检查。 1.3 实验内容 题目二: 编写邮件客户端,要求如下: 第一级: 实现一个基本的文本编辑器,能支持邮件的撰写和保存为草稿。 支持目录结构,能对邮件进行分类,并提供基本的收件箱、发件箱、草稿 箱、垃圾箱等文件夹。 支持邮件帐号的配置与存储。 具备完成所需功能的基本图形用户界面(GUI),并具友好性。 第二级: 支持将邮件服务器上的邮件完全下载到本地并显示。 支持邮件下载时选择帐号管理器中的邮件服务器。 支持接收进度指示和接收完成指示。 具备完成所需功能的基本图形用户界面(GUI),并具友好性。 第三级: 支持邮件下载仅下载邮件头,并能根据需要实时下载邮件全部内容。 支持服务器上邮件下载完成后对邮件是否删除的操作。 具备完成所需功能的基本图形用户界面(GUI),并具友好性。 第四级: 支持普通文本邮件的发送。 可选择发送用帐号并可编辑发送用帐号。 支持发送进度指示和发送完成指示。 具备完成所需功能的基本图形用户界面(GUI),并具友好性。 第五级: 支持 HTML、RTF 格式邮件的撰写和发送。 支持邮件发送时添加附件。 支持抄写和密送功能。 支持邮件的回复/转发功能。 具备完成所需功能的基本图形用户界面(GUI),并具友好性。 说明:额外功能的实现,将视具体情况予以一定加分。 1.4 实验过程 1.4.1 需求分析 对应检查表确定需要编写代码的模块 序号 检查内容 1 具备 GUI 界面 2 具有基本的邮件编辑器,可以撰写邮件 3 能够配置邮件服务器帐号并存储 界面:包括登录界面、收件夹、写信等 4 支持 POP3 邮件完全下载 支持 POP3 邮件按需下载5 (先下载邮件头,根据需要全文下载) 6 支持下载保存/下载删除两种模式 收信:基于 POP3 协议 7 支持纯文本邮件发送 写信:基于 SMTP 协议 8 支持邮件发送/接收进度显示 未完成 9 支持邮件本地分门别类存储 未完成 基 本 内 容 10 支持邮件的回复和转发 写信(将相应内容当作参数传给对应函数) 1 支持 MIME 格式邮件的撰写和发送 2 支持附件 3 支持邮件的抄写和密送 高 级 内 容 4 支持多邮件服务器,并可在发送和接收 时选择邮件服务器 未完成 根据上述表格对相应的模块开始编写代码。 本次的实验使用 Java 编写,环境为 Eclipse SDK。 5 1.4.2 界面 由于直接使用 Eclipse 编写界面的代码太过复杂,所以我使用了 Eclipse 的插件 Window Builder,可直接将控件拖拽到窗体中,并生成相应的代码,双击按钮 时也会生成按钮的动作相关函数。 1)登录界面: 按钮 Login:单击 Login 之后,弹出主窗口,在调用主窗口的 class 时,将 Mail Address 和 Password 的内容作为参数传给主窗口的类,并交由主窗口进行验证。 2)主界面: 单击菜单,选择选项卡,会弹出相应的对话框。 3) 写信: 填写收件人、题目、内容后 可发送。 4) 收信: 得到邮件的部分信息,单击 Show,会弹出选中的邮件的完全显示,Download All 会将邮件全部下载到本地。 5)显示邮件 单击 Download import javax.swing.JButton; import javax.mail.Session; import javax.swing.JInternalFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import MailClient1.MailClient; import javax.swing.JTextField; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import .InetAddress; import .Socket; import .UnknownHostException; import java.util.Properties; import javax.swing.JLabel; import java.io.*; import .*; import sun.misc.*; import javax.swing.JTextArea; /import sun.misc.BASE64Encoder; /import sun.misc.BASE64Decoder; 2)定义 SendFrame 类的内容 首先定义类包含的数据结构,名称和用途如表中所示: private JTextField txt_to; 文本框的句柄,用于填写收件人地址 private JTextField txt_subject; 文本框的句柄,用于填写标题 private JTextArea textArea; 文本框的句柄,用于填写邮件内容 private String pusernameadd; 字符串,保存当前用户的邮件地址 private String ppasswd; 字符串,保存密码 private String psn_s_smtp; 字符串,保存 smtp 服务器地址 private String pusername1; 字符串,保存用户名 public class SendFrame extends JInternalFrame /* * */ private static final long serialVersionUID = 1L; private JTextField txt_to; private JTextField txt_subject; private JTextArea textArea; private String pusernameadd; private String ppasswd; private String psn_s_smtp; private String pusername1; 3)定义 SendFrame 类的构造函数 SendFrame 在这个函数中,主要将界面架构起来,邮件的发送并不是在这个函数中完成的。 当 Send 按钮被单击后,消息被函数 btnNewButton.addActionListener 接收到,此时通过 调用 SendAction 函数完成邮件的发送。 public SendFrame(final String sn_username,final String sn_passwd,final String sn_s_smtp,final String usernamer1) pusernameadd=sn_username; ppasswd=sn_passwd; psn_s_smtp=sn_s_smtp; pusername1=usernamer1; /Interface JPanel contentPane; /super(); setClosable(true); setIconifiable(true); setTitle(“Send Mail“); setBounds(50,50,452,380); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5); setContentPane(contentPane); contentPane.setLayout(null); JButton btnNewButton = new JButton(“Send“); btnNewButton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) try 9 SendAction(txt_to.getText(),textArea.getText(),txt_subject.getText(); catch (Exception e1) / TODO Auto-generated catch block e1.printStackTrace(); ); btnNewButton.setBounds(88, 294, 72, 24); contentPane.add(btnNewButton); txt_to = new JTextField(); txt_to.setBounds(88, 25, 334, 24); contentPane.add(txt_to); txt_to.setColumns(10); txt_to.setText(““); txt_subject = new JTextField(); txt_subject.setText(“Test11“); txt_subject.setBounds(88, 62, 334, 24); contentPane.add(txt_subject); txt_subject.setColumns(10); JLabel lblYour = new JLabel(“To:“); lblYour.setBounds(11, 28, 72, 18); contentPane.add(lblYour); JLabel lblSubject = new JLabel(“Subject:“); lblSubject.setBounds(11, 65, 72, 18); contentPane.add(lblSubject); JLabel lblConstent = new JLabel(“Constent:“); lblConstent.setBounds(11, 108, 72, 18); contentPane.add(lblConstent); JButton btnQuit = new JButton(“Quit“); btnQuit.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) ); btnQuit.setBounds(350, 293, 72, 25); contentPane.add(btnQuit); textArea = new JTextArea(); textArea.setBounds(88, 106, 334, 175); textArea.setText(“The existence only exists in peoples perception, nwhich, by nature, is of vanity.“); contentPane.add(textArea); setVisible(true); 4)完成寄信操作的函数 SendAction 使用了计算机网络实验 SOCKET 编程指导手册 中的代码,收件人、内容、 被当作参数传如,并赋值 SendAction 中的变量 to、 mailConstent 而发件人地址、smtp 服务器地址、用户名、密码从类的数据结构里面读取。 public int SendAction(String to1,String constent1,String subject1) throws Exception String mailContent = “; /邮件报文 String response = “; /来自服务器的应答 String mailServer = “; /邮件服务器 String from = “; /发件人地址 String to = “; /收件人地址 /设置邮件服务器、发件人地址、收件人地址 mailServer = psn_s_smtp; from = pusernameadd; to = to1; /设置邮件正文 mailContent = “From: “ + from + “n“ + “To: “ + to + “n“ + “Subject: “ + subject1 + “n“+ “Constent: “ + constent1 +“n“;/? /得到本机主机名 String hostName = InetAddress.getLocalHost().getHostName(); /建立一个到邮件服务器的连接,端口号25 Socket s = new Socket(mailServer,25); /将SOCKET 输入流连接到带缓冲功能的 /输入流 BufferedReader,以便一次读一行来自 /服务器的应答报文 BufferedReader inFromServer = new BufferedReader( new InputStreamReader(s.getInputStream(); /将SOCKET 输出流连接到带缓冲功能的 / 输出流 PrintWriter,以便一次输出一行报文到服务器 PrintWriter outToServer = new PrintWriter(s.getOutputStream() ,true); 11 /读取来自服务器的第一行应答,并显示在屏幕上 response = inFromServer.readLine(); System.out.print(“MailServer:“ + response + “n“); /将用户的帐号和密码以BASE64 格式进行编码 /以便进行服务器身份验证 BASE64Encoder encoder = new BASE64Encoder(); String encodedUser = encoder.encode(pusername1.getBytes(); String encodedPwd = encoder.encode(ppasswd.getBytes();/密码! System.out.print(“Client:“ + “EHLO “ + hostName + “n“); /和服务器会话,发送EHLO hostname 命令 outToServer.println(“EHLO “ + hostName); /读入来自服务器的 5 行应答,并显示在屏幕上 for(int i = 0; i “); /读入来自服务器的应答,并显示在屏幕上 response = inFromServer.readLine(); System.out.print(“MailServer:“ + response + “n“); System.out.print(“Client:“ + “RCPT TO: “ + to + “n“); /向服务器发送 RCPT TO: 收件人地址 outToServer.println(“RCPT TO: “); /读入来自服务器的应答,并显示在屏幕上 response = inFromServer.readLine(); System.out.print(“MailServer:“ + response + “n“); /请求发送邮件正文 outToServer.println(“DATA“); /读入来自服务器的应答,并显示在屏幕上 response = inFromServer.readLine(); System.out.print(“MailServer:“ + response + “n“); /开始发送邮件正文 outToServer.println(mailContent); outToServer.println(mailContent); /发送邮件结束标志 outToServer.println(“.“); /读入来自服务器的应答,并显示在屏幕上 response = inFromServer.readLine(); System.out.print(“MailServer:“ + response + “n“); /关闭 SOCKET s.close(); return 0; 1.4.4 收信 收信的任务是由两个类协作完成的,一个类用来部分显示邮件信息,当点击 Show 按钮时,第二个类用来显示在第一个类中被选中的邮件。 1) 调用的库 可以看到在GetMail 类中,有 import MailClient1.POP3Client; import MailClient1.ShowMail; 两个 声明,通过这种方式,当需要时可以在GetMail类中调用POP3Client.java 和 ShowMail.java 中的函数。 package MailClient1; /import javax.swing.JButton; import javax.mail.Folder; import javax.mail.Message; import javax.mail.Session; 13 import javax.mail.Store; import javax.swing.JDesktopPane; import javax.swing.JInternalFrame; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JScrollPane; import javax.swing.border.EmptyBorder; import javax.swing.JTable; import javax.swing.JList; import java.awt.Color; import javax.swing.JLabel; import java.awt.BorderLayout; import java.io.DataOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.RandomAccessFile; import .UnknownHostException; import java.util.Properties; import javax.swing.JButton; import javax.swing.ListSelectionModel; import MailClient1.POP3Client; import MailClient1.ShowMail; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; 2) 部分显示邮件信息 GetMail 的构造函数用来构建窗体,和部分显示邮件信息,通过调用 getsubmaillist(); getmaillist();两个函数将邮件的部分信息提取并存储到数组 maillist中。 当点击“Show”按钮后,调用ShowMail类中的函数,显示邮件内容。 public class GetMail extends JInternalFrame private JTable table; private JTable table_1; String maillist=new String203; String protocol=“pop3“; String submaillist; String get_server; String get_username; String get_passwd; String get_smtp; String get_usernamelong; public GetMail(String pop3_server,String usernamelong,String username1,String password1,final JDesktopPane DESKTOP_PANE,String smtp1) get_server=pop3_server; get_username=username1; get_passwd=password1; get_smtp=smtp1; get_usernamelong=usernamelong; table_1 = new JTable(); getContentPane().add(table_1, BorderLayout.CENTER); JPanel contentPane; /super(); setClosable(true); setIconifiable(true); setTitle(“Inbox“); setBounds(50,50,848,489); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5); setContentPane(contentPane); contentPane.setLayout(null); /获取邮件 String pop3Server = pop3_server; String username=username1; String password=password1; try /getmaillist(pop3_server,username1,password1); getsubmaillist(); getmaillist(); catch (Exception e) / TODO Auto-generated catch block e.printStackTrace(); / /*Object tableData= new Object “haha!“,““,“2013.04.18“, new Object “hahaha!“,““,“2013.04.19“ ; */ Object columnTitle=“Title“,“From“,“Time“; 15 table =new JTable(maillist,columnTitle); table.setShowGrid(false); table.setSurrendersFocusOnKeystroke(true); table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); table.setBackground(new Color(255, 250, 240); table.setForeground(new Color(0, 0, 0); table.setBounds(14, 44, 804, 366); contentPane.add(table.getTableHeader(); contentPane.add(table); JLabel lblTitle = new JLabel(“Title“); lblTitle.setBounds(29, 13, 72, 18); contentPane.add(lblTitle); JLabel lblFrom = new JLabel(“From“); lblFrom.setBounds(327, 13, 72, 18); contentPane.add(lblFrom); JLabel lblDate = new JLabel(“Date“); lblDate.setBounds(569, 13, 72, 18); contentPane.add(lblDate); JButton btnShow = new JButton(“Show“); btnShow.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) int selected = table.getSelectedRows(); /查找选中行 int a=selected0; DESKTOP_PANE.add(new ShowMail(maillista2,maillista1,maillista0,getmailcontent(a+1),DESKTOP_PANE,get_usernamelong,get_p asswd,get_username,get_smtp,get_server); ); btnShow.setBounds(14, 423, 113, 27); contentPane.add(btnShow); JButton btnDownloadAll = new JButton(“Download All“); btnDownloadAll.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) try Saveall(); catch (IOException e1) / TODO Auto-generated catch block e1.printStackTrace(); ); btnDownloadAll.setBounds(270, 423, 129, 27); contentPane.add(btnDownloadAll); setVisible(true); 3)getsubmaillist 函数,通过调用 POP3Client 类中的函数 receiveMail 获得邮件 的内容,此时邮件内容列表还没有建成,需调用 getmaillist 函数处理字符串 submaillist,形成邮件的内容列表。 public void getsubmaillist() throws UnknownHostException, IOException String server=get_server;/POP3 服务器地址 String user=get_username;/用户名 String password1=get_passwd;/密码 POP3Client pop3Client=new POP3Client(server,110); pop3Client.recieveMail(user,password1); submaillist=pop3Client.RteurnMaillist(); 4)getmaillist 函数,在 getsubmaillist 函数之后调用,并将大段的邮件内容处理, 得到邮件列表。 public void getmaillist() int i=1,j; int start=0; int end=1; String current; for(i=0;i 设置 ip 地址和子网掩码 可以用命令行设置命令 ipconfig /dg 设置网关 ip 地址 网关 ip 地址暂设为本网段地址最后字节为 254 的地址 也可以通过在命令行键入命令 winipcfg 在图形界面设置 ip 地址 子网掩码 网 关 设置 PC1 计算机的 IP 地址为 1 子网掩码 网关 54 设置 PC2 计算机的 IP 地址为 2 子网掩码 网关 54 互相可以连通 3) PC3-PC8 设置在同一个网段,子网地址是: 设置 PC3 计算机的 IP 地址为 3 子网掩码 网关 54 设置 PC4 计算机的 IP 地址为 4 子网掩码 网关 54 29 设置 PC5 计算机的 IP 地址为 5 子网掩码 网关 54 设置 PC6 计算机的 IP 地址为 6 子网掩码 网关 54 设置 PC7 计算机的 IP 地址为 7 子网掩码 网关 54 设置 PC8 计算机的 IP 地址为 8 子网掩码 网关 54 本网段可以连通 不同网段不通 sy1001.nwc 4)同时为路由器配置端口地址,使得两个子网内部的各 PC 机之间可以自由通信 选择设备。 Router# write sy1001.nwc 路由器配置后 不同网段连通 3、按如下要求重新设置各 PC 机 IP 地址 将 PC1、PC2 设置在同一个网段,子网地址是: 将 PC3、PC5、PC7 设置在同一个网段,子网地址是: 以上设置可在原实验基础上不做改变 设置 PC1 计算机的 IP 地址为 1 子网掩码 网关 54 设置 PC2 计算机的 IP 地址为 2 子网掩码 网关 54 设置 PC3 计算机的 IP 地址为 3 子网掩码 网关 31 54 设置 PC5 计算机的 IP 地址为 5 子网掩码 网关 54 设置 PC7 计算机的 IP 地址为 7 子网掩码 网关 54 将 PC4、PC6、PC8 设置在同一个网段,子网地址是: 用 ipconfig /ip 命令 设置 PC4 计算机的 IP 地址为 4 子网掩码 网关 54 设置 PC6 计算机的 IP 地址为 6 子网掩码 网关 54 设置 PC8 计算机的 IP 地址为 8 子网掩码 网关 54 为路由器配置端口地址 4、 分析测试连通性 分析各 PC 机之间的连通性并对分析结果进行测试,同时使用所学理论知识对 测试结果进行再分析 设置多网段后 本网段通 跨网段不通 VLAN 未设置 交换机 truck 未设置 2.4.3 实验 2 路由配置实验 1、使用仿真软件描述网络拓扑图 1.2 33 sy2001.top 2、按如下要求配置 RIP 协议 按如下要求设置各 PC 机 IP 地址 PC1 处于 网段 PC2 处于 网段 PC3 处于 网段 PC4 处于 网段 2001.nwc 3、 设置路由器端口的 IP 地址 路由器 1 : 路由器 2 路由器 3 路由器 4 35 4、 设置路由器 RIP 协议配置 路由器 1: 路由器 2 路由器 3 路由器 4 37 其中 路由查看两次,一次是其他路由器配置完成之前,一次是其他路由器配置 完成之后,可以看到路由显示的变化 gateway of last resort is not set 5、 检查各 PC 机互相访问情况 PC4 与 PC1 不能互相访问:PC4 与 PC2 能互相访问: PC4 与 PC3 能互相访问 查看路径 Gateway of last resort is not set 就是默认网关没有设置 gateway of last resort 就是默认网关(default gateway) “gateway of last resort“ 是 show ip route 后显示出来的 “default gateway“ 是配置的时候的说法 总体上来说就是 gateway of last resort 已经写入路由表,所以是生效的。 default gateway 是配置时候的,因此可能下一跳失效的时候,就不生效。 如果默认网关没有设置 那么同一个路由器上的 2 个网段可能 ping 不通 因为数 据不知道出去的大门在哪 6、 思考 39 41 去掉重复支路 所有 PC 连通 重新设置重复支路网络连通 未发现故障原因 路由器 1 设置 43 路由器 3 设置 测试结果 重复的短接支路开通前 跃点 5 开通后 跃点 4 如果不设置时钟频率,会出现什么现象 采用以太网接口 不设置时钟频率 第一次的项目 192168.111 无法访问 未查明原因,完全重新做一遍后,通 信正常。 在路由器上重新配置 OSPF 协议,使 PC 机能互相访问:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外墙腻子涂刷合同范本
- 工地圆钢出售合同范本
- 房屋过户物业合同范本
- 临时房搭建合同范本
- 平整铁板出售合同范本
- 代发维修票合同样本
- 买个人合同标准文本
- 2025年-山西建筑安全员B证考试题库附答案
- 2025年-青海省建筑安全员《A证》考试题库及答案
- 2025年-上海市安全员-B证考试题库附答案
- 七年级心理健康期末考试试卷(含答案)
- 扫雷游戏课件
- 短视频编辑与制作全套教学课件
- 小学语文教学技能PPT完整全套教学课件
- 美国宪法全文(中、英文版)
- 初中历史课件:中国古代科技发展史
- 垃圾焚烧发电环境影响评价报告书
- 生产车间5S稽核评分表
- cmk 设备能力分析计数表格
- 道路运输领域重大事故风险链鱼骨图
- 肿瘤科运用PDCA循环提高疼痛评估的规范率品管圈成果汇报
评论
0/150
提交评论