已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档课 程 实 验 报 告课程名称: 专业班级:计算机科学与技术1003班 学 号: 姓 名: 鲁辰 指导教师: 报告日期: 2013.05.06 计算机科学与技术学院目 录1实验二 Socket 编 程(E-Mail)31.1 实验目的31.2 实验要求31.3 实验内容31.4 实验过程41.4.1 需求分析41.4.2 界面51.4.3 写信71.4.4 收信121.5 实验体会182 实验2 网络组建与实施182.1 实验目的182.2 实验环境、要求182.2.1 实验实验环境182.2.2实验要求182.3实验内容182.3.1实验1 组网实验182.3.2 实验2 路由配置实验192.3.3 实验3 VLAN划分实验202.3.4 实验4 访问控制配置实验212.4 实验过程212.4.1 系统的安装与配置212.4.2 实验1 组网实验222.4.3 实验2 路由配置实验322.4.4 实验3 VLAN划分实验442.4.5 实验4 访问控制配置实验472.5 实验体会501实验二 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支持POP3邮件按需下载(先下载邮件头,根据需要全文下载)6支持下载保存/下载删除两种模式7支持纯文本邮件发送写信:基于SMTP协议8支持邮件发送/接收进度显示未完成9支持邮件本地分门别类存储未完成10支持邮件的回复和转发写信(将相应内容当作参数传给对应函数)高级内容1支持MIME格式邮件的撰写和发送未完成2支持附件3支持邮件的抄写和密送4支持多邮件服务器,并可在发送和接收时选择邮件服务器根据上述表格对相应的模块开始编写代码。本次的实验使用Java编写,环境为Eclipse SDK。1.4.2 界面由于直接使用Eclipse编写界面的代码太过复杂,所以我使用了Eclipse的插件Window Builder,可直接将控件拖拽到窗体中,并生成相应的代码,双击按钮时也会生成按钮的动作相关函数。1)登录界面:按钮Login:单击Login之后,弹出主窗口,在调用主窗口的class时,将Mail Address和 Password的内容作为参数传给主窗口的类,并交由主窗口进行验证。2)主界面:单击菜单,选择选项卡,会弹出相应的对话框。3) 写信:填写收件人、题目、内容后可发送。4) 收信:得到邮件的部分信息,单击Show,会弹出选中的邮件的完全显示,Download All会将邮件全部下载到本地。5)显示邮件单击Download&Save会将邮件保存至本地单击Download&Delete会将邮件保存到本地并从服务器上删除单击Reply会把寄件人地址、标题作为参数传给Reply类,并弹出Send Mail 对话框。单击Reply会把内容、标题作为参数传给Forward类,并弹出Send Mail 对话框。1.4.3 写信1) 声明需要使用的库文件由于Eclipse很智能,不需要手动添加,当调用了某个函数时,如果没有添加相应的库文件,Eclipse会报错,提供修改方案,在前面添加相应的库文件。package MailClient1;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;/InterfaceJPanel 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 SendAction(txt_to.getText(),textArea.getText(),txt_subject.getText(); catch (Exception e1) / TODO Auto-generated catch blocke1.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 ExceptionString 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();/建立一个到邮件服务器的连接,端口号25Socket s = new Socket(mailServer,25);/将SOCKET 输入流连接到带缓冲功能的/输入流BufferedReader,以便一次读一行来自/服务器的应答报文BufferedReader inFromServer = new BufferedReader(new InputStreamReader(s.getInputStream();/将SOCKET 输出流连接到带缓冲功能的/ 输出流PrintWriter,以便一次输出一行报文到服务器PrintWriter outToServer =new PrintWriter(s.getOutputStream() ,true);/读取来自服务器的第一行应答,并显示在屏幕上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 5; i+)response = inFromServer.readLine();System.out.print(MailServer: + response + n);System.out.print(Client: + AUTH LOGIN n);/和服务器会话,发送AUTH LOGIN 命令,请求身份验证outToServer.println(AUTH LOGIN );/读入来自服务器的应答,并显示在屏幕上response = inFromServer.readLine();System.out.print(MailServer: + response + n);System.out.print(Client: + encodedUser + n);/向服务器发送自己的帐号outToServer.println(encodedUser);/读入来自服务器的应答,并显示在屏幕上response = inFromServer.readLine();System.out.print(MailServer: + response + n);System.out.print(Client: + encodedPwd + n);/向服务器发送自己的密码outToServer.println(encodedPwd);/读入来自服务器的应答,并显示在屏幕上response = inFromServer.readLine();System.out.print(MailServer: + response + n);System.out.print(Client: + MAIL FROM: + from + n);/向服务器发送MAIL FROM: 发件人地址outToServer.println(MAIL FROM: );/读入来自服务器的应答,并显示在屏幕上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);/关闭SOCKETs.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;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 JInternalFrameprivate 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 blocke.printStackTrace();/*Object tableData=new Object haha!,,2013.04.18,new Object hahaha!,,2013.04.19;*/Object columnTitle=Title,From,Time;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_passwd,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 blocke1.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;i20&submaillisti+1!=null;i+) /start=submaillist.substring(start+i).indexOf(hahahamail+(i+1); /end=submaillist.substring(end+i).indexOf(endhahamail+(i+1); current=submaillisti+1;int x=current.indexOf(Subject: )+Subject: .length();/int n=x+(current.substring(x,current.length().indexOf(n);maillisti0=current.substring(x,x+(current.substring(x,current.length().indexOf(n);int k=current.indexOf(From: )+From: .length();maillisti1=current.substring(k,k+current.substring(k).indexOf(n) );/maillistij=current.substring(current.indexOf(From)+From: .length(), current.indexOf(n);int m=current.indexOf(Date: )+Date: .length();maillisti2=current.substring(m, m+current.substring(m).indexOf(n); 5) 得到邮件内容 public String getmailcontent(int i) int aa=submaillisti.indexOf(X-CM-SenderInfo:); if(aa=-1) return 不能解析的邮件格式!; else int bb=submaillisti.indexOf(Content-Transfer-Encoding: 7bit); if(bb!=-1) int ee=submaillisti.substring(bb).indexOf(-=_Part); String hh=submaillisti.substring(bb+Content-Transfer-Encoding: 7bit.length(),bb+ee); return hh; else int ee=submaillisti.substring(aa).indexOf(endhahamail); return submaillisti.substring(aa+X-CM-SenderInfo:.length(), aa+ee); 6) 保存所有邮件 private void Saveall() throws IOException try OutputStream os = new FileOutputStream(D:/miall.txt);/创建一个文件DataOutputStream dos = new DataOutputStream(os);/int k = 0, i = 1, j = 1;int i=0;for(i=1;i20&submaillisti!=null;i+)try dos.writeChars(submaillisti); catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();try os.close();/ 关闭文件输出流 catch (IOException e) System.out.println(e);/ 输出异常 catch (FileNotFoundException e) System.out.println(文件创建成功!); 1.5 实验体会通过编写邮件客户端,我掌握了TCP、SMTP、POP3的相关知识,并加深了自己对java语言的熟练程度。在编写程序的过程中,经常遇到不懂的地方,通过仔细阅读老师给出的和网上的例子程序的代码,我理清了思路,更快的写好了程序。2 实验2 网络组建与实施2.1 实验目的 了解IP协议、网络层协议和数据链路层协议的工作原理及机制;掌握IP地址的规划方法;掌握路由协议的配置方法。掌握路由器及二/三层交换机的配置方法。了解VLAN的划分原理;掌握访问控制的配置方法。2.2 实验环境、要求2.2.1 实验实验环境Boson Netsin仿真软件(实验所用版本号为5.31)2.2.2实验要求熟悉Boson Netsim仿真软件利用Boson Netsim仿真软件完成实验内容提交实验设计报告基于自己的实验设计报告,通过实验课的上机实验,演示给实验指导老师检查2.3实验内容2.3.1实验1 组网实验1)使用仿真软件描述网络拓扑图1.12) 按如下要求进行IP地址规划将PC1、PC2设置在同一个网段,子网地址是:,PC3-PC8设置在同一个网段,子网地址是: 同时为路由器配置端口地址,使得两个子网内部的各PC机之间可以自由通信。3) 按如下要求重新设置各PC机IP地址将PC1、PC2设置在同一个网段,子网地址是:将PC3、PC5、PC7设置在同一个网段,子网地址是:将PC4、PC6、PC8设置在同一个网段,子网地址是:为路由器配置端口地址4)分析测试连通性分析各PC机之间的连通性并对分析结果进行测试,同时使用所学理论知识对测试结果进行再分析2.3.2 实验2 路由配置实验1)使用仿真软件描述网络拓扑图1.22)按如下要求配置RIP协议按如下要求设置各PC机IP地址 PC1处于网段 PC2处于网段 PC3处于网段 PC4处于网段设置路由器端口的IP地址在路由器上配置RI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 不续签商场合同范本
- 校际教师牵手协议书
- 与主播签约合同范本
- 个人欠款保证协议书
- 农村合并村镇协议书
- 山东日照市政务服务中心管理办公室2025年下半年招考专业技术人员易考易错模拟试题(共500题)试卷后附参考答案
- 冷藏库建设合同范本
- 格栅吊顶技术协议书
- 框架协议加结算合同
- 桉树除草合同协议书
- 2025河南省农业信贷担保有限责任公司秋季专场招聘28人考试笔试备考试题及答案解析
- 西藏养老护理考试题库大全及答案解析
- 2025年河北省高职单招考试六类职业适应性测试(综合)
- 2025消防宣传月专题培训
- 水冷无功补偿安置施工方案
- 村报账员基础知识培训课件
- 烟叶种植基础知识培训课件
- 2025中国人民财产保险股份有限公司招聘考试参考题库及答案解析
- 电气控制柜制作工艺与技术标准
- 肝动脉灌注化疗持续动脉给药及管路护理专家共识
- 机械设备租赁结算单范本
评论
0/150
提交评论