2. POP3编程(参考电子讲义“网络编程参考资料-应用层.pdf”及教材“第
2章 Socket编程”)
阅读 “网络编程参考资料-应用层.pdf”中 8.3.2部分,实现“POP3客户实现”的源代码(Pop3ClientDemo.java),并在机器上编译运行通过。(注:可输入城院POP3邮件服务器pop3.email.zucc.edu.cn或其他邮件服务器作为POP3服务器) 【程序源代码】
Pop3ClientDemo.java import java.io.*; import java.net.*; import java.util.*;
public class Pop3ClientDemo { protected int port = 110;
protected String hostname = \ 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 (\ 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(\
// 和 SMTP 不同的地方,POP3 的回覆不再是一個 number 而是 // +OK 來代表要求成功。失敗則以 -ERR 來代表。 return line.toUpperCase().startsWith(\ }
// 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(\ else
System.out.println(line); return line; }
// Writes a line to the POP server, and displays it to the screen protected void writeMsg(String msg) throws Exception {
pw.println(msg); pw.flush();
System.out.println(\ }
// 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(\ writeMsg(\ readLine(true);
System.out.println(\ closeConnection(); }
// Display emails in a message
protected void displayEmails() throws Exception {
BufferedReader userinput = new BufferedReader( new InputStreamReader (System.in) );
System.out.println(\ \
System.out.println(\ \
// Open a connection to POP3 server System.out.println(\
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(\ }
// Login by sending USER and PASS commands System.out.println(\ writeMsg(\ if(!responseIsOk()) { sendQuit();
throw new Exception(\ }
System.out.println(\ writeMsg(\ if(!responseIsOk()) { sendQuit();
throw new Exception(\ }
// Get mail count from server .... System.out.println(\ writeMsg(\
// ... 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 (\ sendQuit(); return; }
System.out.println (\ System.out.println(\ userinput.readLine();
for(int i = 1; i <= messages ; i++) {
System.out.println(\ writeMsg(\
System.out.println(\ line = readLine(false);
while(line != null && !line.equals(\ line = readLine(false); }
System.out.println(\
System.out.println(\ \ String response = userinput.readLine(); if (response.toUpperCase().startsWith(\ 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(\ data = br.readLine();
if(data == null || data.equals(\ else hostname=data;
System.out.print(\ data = br.readLine();
if(!(data == null || data.equals(\ username=data;
System.out.print(\ data = br.readLine();
if(!(data == null || data.equals(\