⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 popexample.java

📁 java网络编程
💻 JAVA
字号:
//PopExample.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

public class PopExample {
	private static BufferedReader in; //从套接字中读取文本
	private static PrintStream out; // 将文本写入套接字

	public static void main(java.lang.String[] args) {
		//用户名	
		String username = "";
		//密码 
		String password = "";
		//Pop服务器名 
		String popServer = "";
		//设置标志位
		boolean delete = false;
		boolean secure = false;
		Socket s;
		String line;
		String numberMessages;

		try {
			if (args.length == 3) {
				//从命令行中去用户名,密码和服务器名
				popServer = args[0];
				username = args[1];
				password = args[2];
			} else
				System.out.println("Usage:\r\n: java PopExample <PopServer> <username> <password>");

			System.out.println("Connecting to " + popServer + " ...");
			//Pop3服务默认使用110端口
			//建立TCP连接
			s = new Socket(popServer,110);
			System.out.println("Connected\nAuthentication in progress...");
			//连接建立成功,获得关联的输入流和输出流
			in = new BufferedReader(new InputStreamReader(s.getInputStream()));
			out = new PrintStream(s.getOutputStream());
			//着一行响应是服务器的欢迎信息,可抛弃
			line = readFromInputStream();
			//发送用户名
			printToOutputStream("USER " + username);
			//如果用户不存在,则响应信息开头有+OK字样。否则退出
			if (!readFromInputStream().startsWith("+OK")) {
				System.out.println("Wrong user name, disconnecting");
				s.close();
				System.exit(1);
			}
			//用户名存在,则发送密码
			out.println("PASS " + password);
			System.out.println("R: PASS ********");
			//读服务器响应信息
			line = readFromInputStream();
			//如果密码核对成功,响应信息中开头+OK字样
			if (!line.startsWith("+OK")) {
				//密码不正确,无法继续
				System.out.println("Wrong password, disconnecting");
				s.close();
				System.exit(1);
			}
			//命令STAT
			printToOutputStream("STAT");
			//读取响应
			line = readFromInputStream();
			if (!line.startsWith("+OK")) {
				//如果命令执行失败,则退出
				System.out.println("Error:" + line);
				s.close();
				System.exit(1);
			}
			//从统计信息中抽取消息个数
			int i = line.lastIndexOf(' ');
			numberMessages = line.substring(4, i);
			System.out.println("You have " + numberMessages + " message(s) in your mailbox");
			//获取消息个数
			int n = Integer.parseInt(numberMessages);
			int numberBytes;
			//取出服务器上的每一个消息
			for (int msg = 1; msg <= n; msg++) {
				System.out.println("Retreaving message " + msg);
				//命令RETR 用于收取消息
				printToOutputStream("RETR " + msg);
				//从服务器读取消息
				line = readFromInputStream();
				if (!line.startsWith("+OK")) {
					System.out.println("Error: " + line);
					s.close();
					System.exit(1);
				}
				//消息已“.”号结束,一行中连续两个"."代表"."
				line = in.readLine();
				while (line.compareTo(".") != 0) {
					if (line.compareTo("..") == 0)
						System.out.println(".");
					else
						System.out.println(line);
					//读取下一行
					line = in.readLine();
				}

				//消息已读取到本地,从服务器删除消息
				//删除消息的命令是DELE [messagenumber]
				printToOutputStream("DELE " + msg);
				readFromInputStream();
			}
			// 准备退出,使用QUIT命令		
			printToOutputStream("QUIT");
			readFromInputStream();
			//关闭套接字
			s.close();
		} catch (IOException e) {
			e.printStackTrace(System.err);
		}
	}

	//	方法printToOutputStream()向SMTP服务器发送命令
	private static void printToOutputStream(String s) throws IOException {
		System.out.println("S : " + s);
		out.println(s);
		return;
	}

	//	方法readFromInputStream()接收从SMTP服务器发回的响应信息
	private static String readFromInputStream() throws IOException {
		String s = in.readLine();
		if (s != null)
			System.out.println("R :" + s);
		return s;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -