计算机网络实验报告2.doc_第1页
计算机网络实验报告2.doc_第2页
计算机网络实验报告2.doc_第3页
计算机网络实验报告2.doc_第4页
计算机网络实验报告2.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 实 验 报 告 课程名称: 计算机网络 实验二 Socket 编程专业班级: 计科1011班 学 号: U201014547 姓 名: 汪霄鹏 指导老师: 王美珍 报告日期: 2013年5月15日 计算机科学与技术学院1、 实验目的、了解应用层和运输层的作用及相关协议的工作原理和机制。、掌握 SOCKET 编程的基本方法。2、 实验环境、Windows 操作系统、C、C+、Java 编程开发环境(任选)3、 实验要求 、必须基于 Socket 编程,不能直接借用任何现成的组件。 、提交实验设计报告和源代码;实验设计报告必须包括程序流程,源代码必须加详细注释。 、基于自己的实验设计报告,通过实验课的上机试验,在TurboC 2.0(或者Visual C+ 6.0 或者Java)编程环境下将源代码编译成功,运行演示给实验指导教师检查。4、 实验内容本实验有三个题目,你可以任选其中一个题目完成实验任务。各题目均按难度分为五级,其中第一级为基本级,第五级为最难级,一旦选定题目,你需依次完成该题目各个级别的实验。本人选的是题目二编写邮件客户端:题目二:编写邮件客户端,要求如下:第一级: 1、实现一个基本的文本编辑器,能支持邮件的撰写和保存为草稿。 2、支持目录结构,能对邮件进行分类,并提供基本的收件箱、发件箱、草稿箱、垃圾箱等文件夹。 3、支持邮件帐号的配置与存储。 4、具备完成所需功能的基本图形用户界面(GUI),并具友好性。第二级: 1、支持将邮件服务器上的邮件完全下载到本地并显示。 2、支持邮件下载时选择帐号管理器中的邮件服务器。 3、支持接收进度指示和接收完成指示。 4、具备完成所需功能的基本图形用户界面(GUI),并具友好性。第三级: 1、支持邮件下载仅下载邮件头,并能根据需要实时下载邮件全部内容。 2、支持服务器上邮件下载完成后对邮件是否删除的操作。 3、具备完成所需功能的基本图形用户界面(GUI),并具友好性。第四级: 1、支持普通文本邮件的发送。 2、可选择发送用帐号并可编辑发送用帐号。 3、支持发送进度指示和发送完成指示。 4、具备完成所需功能的基本图形用户界面(GUI),并具友好性。第五级: 1、支持 HTML、RTF 格式邮件的撰写和发送。 2、支持邮件发送时添加附件。 3、支持抄写和密送功能。 4、支持邮件的回复/转发功能。 5、具备完成所需功能的基本图形用户界面(GUI),并具友好性。说明:额外功能的实现,将视具体情况予以一定加分。5、 实验过程1、 实验环境选择 WINDOWS操作系统 使用JAVA编程,使用软件Elicpse 4.2.0 、 jdk1.7,新建JAVA项目编写邮件客户端。2、 项目大致框架3、 JLOGINUI界面利用JAVA的图形界面工具WindowBuilder画出LOGIN基本界面,然后再完成LOGIN的相应功能。重点是建立Login按钮的监听器后,来实现Login的监听响应。建立Login按钮的监听器:JButton btnNewButton = new JButton(Login);btnNewButton.addActionListener(new ActionListener() /Login按钮的监听事件public void actionPerformed(ActionEvent e) try Login_listener(e); catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();JOptionPane.showMessageDialog(null, Please Check Your Infom !); );Login按钮的监听响应事件: private void Login_listener(ActionEvent evt) throws IOException/ Login按钮的监听响应事件 String name = textField.getText();String pass = textField_1.getText();String smtp = textField_2.getText();String imap = textField_3.getText();if (name.isEmpty()JOptionPane.showMessageDialog(null,Pleaseinput username !);/判断name是否为空,为空则提示!return;if (pass.isEmpty()JOptionPane.showMessageDialog(null,Pleaseinput password !);/判断pass是否为空,为空则提示!return;if (smtp.isEmpty()JOptionPane.showMessageDialog(null, Please input smtpsev !);/判断smtp是否为空,为空则提示!return;if (imap.isEmpty()JOptionPane.showMessageDialog(null, Please input imapsev !);/判断imap是否为空,为空则提示!return; int i= imap.indexOf( );/判断imapsev空格所在位置 if (i = -1)JOptionPane.showMessageDialog(null, Format Wrong !);/imapsev的形式错误,空格后没有写端口号,返回值-1return; String port=imap.substring(i+1); int po= Integer.valueOf(port).intValue(); String pp=imap.substring(0,i); Socket socket=new Socket(pp,po);BufferedReaderin=newBufferedReader(new InputStreamReader(socket.getInputStream(); /套接字输出流 PrintStream out =new PrintStream(socket.getOutputStream(); /套接字输入流 if(in=null | out=null) System.out.println(Faile to open the stream); return ; String from_server = in.readLine(); /* OK System.out.println(from_server); System.out.println(a LOGIN + name + +pass);/向服务器发送a LOGIN username password。 out.print(a LOGIN + name + +pass+rn); from_server = in.readLine();/读取屏幕输出流最后一行保存在from_server中 System.out.println(from_server); if(from_server.equals(a OK*);/判断匹配a OK*,匹配则进行下面步骤 acc.setUserName(name); acc.setPassword(pass); acc.setSmtpServer(smtp); acc.setImapServer(imap); new JMainUI(); dispose(); 4、 JMAINUI界面对于Jtree的使用是遇到的大的问题,要创建一个TreeSelectionListener来对判断对树的节点的选择。 tree = new JTree();tree.addTreeSelectionListener(new TreeSelectionListener() public void valueChanged(TreeSelectionEvent e) TreePath path = tree.getSelectionPath();if (path = null)return;int i=path.getPathCount();在MainUI界面设计了JMenuBar menuBar = new JMenuBar(),显示对用户的问候,“Hello+username”,点击来选择WriteMail写邮件和Log Out重登命令。JMenu mnFile = new JMenu(File);mnFile.setText(Hello,+JLoginUI.acc.getUserName();/输出Hello+用户名menuBar.add(mnFile);JMenuItem mntmWritemail = new JMenuItem(WriteMail);/Writemail按钮的监听事件mntmWritemail.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) new JWriteMUI().setVisible(true);/打开写邮件的窗口);mnFile.add(mntmWritemail);JMenuItem mntmReadmail = new JMenuItem(Log Out); /Log Out按钮的监听事件mntmReadmail.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) new JLoginUI().setVisible(true); /打开登录的窗口); 5、 JWriteMUI界面对于写邮件的界面来说,为Button创建的监听事件也是重点。有Send、Drafts、Cancel3个Button需要创建监听事件。Send是发送邮件,Drafts是保存到草稿,Cancel是清空。为Send创建监听器:JButton btnSent = new JButton(Send);/创建Send按钮的监听器btnSent.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) try Send_listener(e); catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();JOptionPane.showMessageDialog(null, Please check your information!););Send按钮的监听响应事件:(Send_listener(e)) private void Send_listener(ActionEvent evt) throws IOException / Send按钮的监听响应事件,是本程序的发送邮件的核心 String String_to=toTxt.getText(); String String_from=fromTxt.getText(); String String_topic=topicTxt.getText();if (String_to.isEmpty()JOptionPane.showMessageDialog(null, please input Mailto !);/判断String_to是否为空,为空则提示!return;if (String_from.isEmpty()JOptionPane.showMessageDialog(null, please input Mailfrom !);/判断String_from是否为空,为空则提示!return;if (String_topic.isEmpty()JOptionPane.showMessageDialog(null, please input Topic !);/判断String_topic是否为空,为空则提示!return;if (contentTxt.getText().isEmpty()JOptionPane.showMessageDialog(null, please input ContentTxt !);/判断contentTxt是否为空,为空则提示!return; enc=new Base64_Encode(); String password = JLoginUI.acc.getPassword(); /用login时的密码,给password port =25; /SMTP协议端口号 int i=String_from.indexOf(); /从From中提取后边的字符串,即邮箱域名,如163.com String s=String_from.substring(i+1);Socket socket=new Socket(host.concat(s), port); /host为smtp,连接上域名之后,即smtp服务器,如 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(); /套接字输出流 PrintStream out =new PrintStream(socket.getOutputStream(); /套接字输入流 if(in=null | out=null) System.out.println(Faile to open the stream); return ; String from_server = in.readLine(); /返回220,读取建立连接后smtp服务器的返回信息 out.print(EHLO + String_from +rn); /发送HELO给服务器 from_server = in.readLine(); /返回250 out.print(RSET+rn); from_server = in.readLine(); /返回250,验证账号前的重置 out.print(AUTH LOGIN+rn); from_server = in.readLine(); /返回334,告诉服务器接下来发送的是账号,密码信息 out.print(enc.encode(String_from.getBytes()+rn); /必须用base64进行编码后发送给服务器 from_server = in.readLine(); /返回334 out.print(enc.encode(password.getBytes()+rn); /必须用base64进行编码后发送给服务器 from_server = in.read

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论