




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
浙江大学城市学院实验报告课程名称 计算机网络应用 实验项目名称 实验七 应用层网络编程(一) 实验成绩 指导老师(签名) 日期 2014-06-03 一. 实验目的和要求1. 通过实现使用Java应用层客户端和服务器来获得关于使用Java Socket网络编程的经验(SMTP、POP3)。二. 实验内容、原理及实验结果与分析1. SMTP编程(参考电子讲义“网络编程参考资料-应用层.pdf”及教材“第2章 Socket编程”)阅读 “网络编程参考资料-应用层.pdf”中 8.3.1部分,实现“SMTP客户机实现”的源代码(SMTPClientDemo.java),并在机器上编译运行通过。(注:可输入城院SMTP邮件服务器或其他邮件服务器作为SMTP服务器)【程序源代码】SMTPClientDemo.javaimport java.io.*;import .*;import java.util.*;/ Chapter 8, Listing 1public class SMTPClientDemo protected int port = 25; protected String hostname = localhost; protected String from = ; protected String to = ; protected String subject = ; protected String body = ; protected Socket socket; protected BufferedReader br; protected PrintWriter pw; / Constructs a new instance of the SMTP Client public SMTPClientDemo() throws Exception try getInput(); sendEmail(); catch (Exception e) System.out.println (Error sending message - + e); public static void main(String args) throws Exception / Start the SMTP client, so it can send messages SMTPClientDemo client = new SMTPClientDemo(); / Check the SMTP response code for an error message protected int readResponseCode() throws Exception String line = br.readLine(); System.out.println( +msg); / Close all readers, streams and sockets protected void closeConnection() throws Exception pw.flush(); pw.close(); br.close(); socket.close(); / Send the QUIT protocol message, and terminate connection protected void sendQuit() throws Exception System.out.println(Sending QUIT); writeMsg(QUIT); readResponseCode(); System.out.println(Closing Connection); closeConnection(); / Send an email message via SMTP, adhering to the protocol known as RFC 2821 protected void sendEmail() throws Exception System.out.println(Sending message now: Debug below); System.out.println(- + -); System.out.println(Opening Socket); socket = new Socket(this.hostname,this.port); System.out.println(Creating Reader & Writer); br = new BufferedReader(new InputStreamReader(socket.getInputStream(); pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(); System.out.println(Reading first line); int code = readResponseCode(); if(code != 220) socket.close(); throw new Exception(Invalid SMTP Server); System.out.println(Sending helo command); writeMsg(HELO +InetAddress.getLocalHost().getHostName(); code = readResponseCode(); if(code != 250) sendQuit(); throw new Exception(Invalid SMTP Server); System.out.println(Sending mail from command); writeMsg(MAIL FROM:); code = readResponseCode(); if(code != 250) sendQuit(); throw new Exception(Invalid from address); System.out.println(Sending rcpt to command); writeMsg(RCPT TO:); code = readResponseCode(); if(code != 250) sendQuit(); throw new Exception(Invalid to address); System.out.println(Sending data command); writeMsg(DATA); code = readResponseCode(); if(code != 354) sendQuit(); throw new Exception(Data entry not accepted); System.out.println(Sending message); writeMsg(Subject: +this.subject); writeMsg(To: +this.to); writeMsg(From: +this.from); writeMsg(); writeMsg(body); code = readResponseCode(); sendQuit(); if(code != 250) throw new Exception(Message may not have been sent correctly); else System.out.println(Message sent); / Obtain input from the user protected void getInput() throws Exception / Read input from user console String data=null; BufferedReader br = new BufferedReader(new InputStreamReader(System.in); / Request hostname for SMTP server System.out.print(Please enter SMTP server hostname: ); data = br.readLine(); if (data = null | data.equals() hostname=localhost; else hostname=data; / Request the senders email address System.out.print(Please enter FROM email address: ); data = br.readLine(); from = data; / Request the recipients email address System.out.print(Please enter TO email address :); data = br.readLine(); if(!(data = null | data.equals() to=data; System.out.print(Please enter subject: ); data = br.readLine(); subject=data; System.out.println(Please enter plain-text message (. character + on a blank line signals end of message):); StringBuffer buffer = new StringBuffer(); / Read until user enters a . on a blank line String line = br.readLine(); while(line != null) / Check for a ., and only a ., on a line if(line.equalsIgnoreCase(.) break; buffer.append(line); buffer.append(n); line = br.readLine(); buffer.append(.n); body = buffer.toString(); 【实验结果与分析】2. POP3编程(参考电子讲义“网络编程参考资料-应用层.pdf”及教材“第2章 Socket编程”)阅读 “网络编程参考资料-应用层.pdf”中 8.3.2部分,实现“POP3客户实现”的源代码(Pop3ClientDemo.java),并在机器上编译运行通过。(注:可输入城院POP3邮件服务器或其他邮件服务器作为POP3服务器)【程序源代码】Pop3ClientDemo.javaimport java.io.*;import .*;import java.util.*;public class Pop3ClientDemo protected int port = 110; protected String hostname = localhost; protected String username = ; protected String password = ; protected Socket socket; protected BufferedReader br; protected PrintWriter pw; / Constructs a new instance of the POP3 client public Pop3ClientDemo() throws Exception try / Get user input getInput(); / Get mail messages displayEmails(); catch(Exception e) System.err.println (Error occured - details follow); e.printStackTrace(); System.out.println(e.getMessage(); / Returns TRUE if POP response indicates success, FALSE if failure protected boolean responseIsOk() throws Exception String line = br.readLine(); System.out.println( +line); / 和 SMTP 不同的地方,POP3 的回覆不再是一個 number 而是 / +OK 來代表要求成功。失敗則以 -ERR 來代表。 return line.toUpperCase().startsWith(+OK); / Reads a line from the POP server, and displays it to screen protected String readLine(boolean debug) throws Exception String line = br.readLine(); / Append a character to indicate this is a server protocol response if (debug) System.out.println( +msg); / Close all writers, streams and sockets protected void closeConnection() throws Exception pw.flush(); pw.close(); br.close(); socket.close(); / Send the QUIT command, and close connection protected void sendQuit() throws Exception System.out.println(Sending QUIT); writeMsg(QUIT); readLine(true); System.out.println(Closing Connection); closeConnection(); / Display emails in a message protected void displayEmails() throws Exception BufferedReader userinput = new BufferedReader( new InputStreamReader (System.in) ); System.out.println(Displaying mailbox with protocol commands + and responses below); System.out.println(- + -); / Open a connection to POP3 server System.out.println(Opening Socket); socket = new Socket(this.hostname, this.port); br = new BufferedReader(new InputStreamReader(socket.getInputStream(); pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(); / If response from server is not okay if(! responseIsOk() socket.close(); throw new Exception(Invalid POP3 Server); / Login by sending USER and PASS commands System.out.println(Sending username); writeMsg(USER +this.username); if(!responseIsOk() sendQuit(); throw new Exception(Invalid username); System.out.println(Sending password); writeMsg(PASS +this.password); if(!responseIsOk() sendQuit(); throw new Exception(Invalid password); / Get mail count from server . System.out.println(Checking mail); writeMsg(STAT); / . and parse for number of messages String line = readLine(true); StringTokenizer tokens = new StringTokenizer(line, ); / +OK tokens.nextToken(); / number of messages int messages = Integer.parseInt(tokens.nextToken(); / size of all messages int maxsize = Integer.parseInt(tokens.nextToken(); if (messages = 0) System.out.println (There are no messages.); sendQuit(); return; System.out.println (There are + messages + messages.); System.out.println(Press enter to continue.); userinput.readLine(); for(int i = 1; i = messages ; i+) System.out.println(Retrieving message number +i); writeMsg(RETR +i); System.out.println(-); line = readLine(false); while(line != null & !line.equals(.) line = readLine(false); System.out.println(-); System.out.println(Press enter to continue. To stop, + type Q then enter); String response = userinput.readLine(); if (response.toUpperCase().startsWith(Q) break; sendQuit(); public static void main(String args) throws Exception Pop3ClientDemo client = new Pop3ClientDemo(); / Read user input protected void getInput() throws Exception String data=null; BufferedReader br = new BufferedReader(new InputStreamReader(System.in); System.out.print(Please enter POP3 server hostname:); data = br.readLine(); if(data = null | data.equals() hostname=localhost; else hostname=data; System.out.print(Please enter
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国家事业单位招聘2025中国人民大学国际关系学院招聘1人笔试历年参考题库附带答案详解
- 哈尔滨市2025黑龙江省气象部门高校毕业生招聘19人(第五批次)笔试历年参考题库附带答案详解
- 2025海南琼海市旅游健康文化发展有限公司招聘10人笔试参考题库附带答案详解
- 2025浙江丽水市青田县县属国有企业青田经济开发区投资发展有限公司招聘丙类人员6人笔试参考题库附带答案详解
- 2025年黄山市徽州国有投资集团有限公司招聘13人笔试参考题库附带答案详解
- 2025年福建省福州左海控股集团有限公司招聘2人笔试参考题库附带答案详解
- 2025年安徽省生态环境产业集团有限公司招聘10人笔试参考题库附带答案详解
- 2025年内蒙古鄂尔多斯市天安公交集团招聘21人笔试参考题库附带答案详解
- 2025年上半年贵州毕节市纳雍县鸽子花农业有限公司招聘10人笔试参考题库附带答案详解
- 2025山东菏泽市劳信就业服务有限公司招聘派遣制人员24人笔试参考题库附带答案详解
- 2025年秋二年级上册数学人教版教学计划含教学进度表
- 餐饮四个人合伙合同协议
- AI驱动的化妆品成分毒性预测模型-洞察及研究
- 中小学生禁毒教育课程教学方案及大纲
- 影像科培训课件
- 2025-2030中国氨基酸市场行情监测与发展前景预测报告
- 2025年锦州辅警考试题库(附答案)
- 2025年广东中考历史试卷真题解读及答案讲评课件
- 律师从事公司自行清算业务操作建议流程
- 橡皮筋驱动小车说课课件
- 跟岗干部管理办法中组部
评论
0/150
提交评论