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

📄 pop3client.java

📁 mywork是rcp开发的很好的例子
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	 *
	 * @return	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ true.
	 * @exception	jp.gr.java_conf.roadster.net.pop.POP3Exception	POP3ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * @exception	java.io.IOException	IOꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 */
	public synchronized boolean stat() throws POP3Exception, IOException {
		return sendCommand(COMMAND_STAT);
	}

	/**
	 * ꆼꆼꆼꆼ NOOP ꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 *
	 * @return	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ true.
	 * @exception	jp.gr.java_conf.roadster.net.pop.POP3Exception	POP3ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * @exception	java.io.IOException	IOꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 */
	public synchronized boolean noop() throws POP3Exception, IOException {
		return sendCommand(COMMAND_NOOP);
	}
	
	/**
	 * ꆼꆼꆼꆼ RSET ꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 *
	 * @return	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ true.
	 * @exception	jp.gr.java_conf.roadster.net.pop.POP3Exception	POP3ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * @exception	java.io.IOException	IOꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 */
	public synchronized boolean rset() throws POP3Exception, IOException {
		return sendCommand(COMMAND_RSET);
	}

	
	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * STAT ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼLIST ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 * ꆼꆼ.
	 *
	 * @return	ꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * @exception	jp.gr.java_conf.roadster.net.pop.POP3Exception	POP3ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * @exception java.io.IOException	IOꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 */
	public synchronized int getMessageCount() throws POP3Exception, IOException {
		if (messageList == null) {
			initList();
		}
		return messageList.length;
	}
	
	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 *
	 * @param	pos	ꆼꆼꆼꆼꆼꆼꆼ.ꆼꆼꆼꆼꆼꆼꆼꆼꆼ0.
	 * @return	ꆼꆼꆼꆼꆼꆼꆼꆼ.(ꆼꆼꆼꆼꆼꆼꆼꆼ.ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ-1ꆼꆼꆼ.
	 * @exception	jp.gr.java_conf.roadster.net.pop.POP3Exception	POP3ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * @exception	java.io.IOException IOꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 */
	public synchronized int getMessageSize(int pos) throws POP3Exception, IOException {
		String item = getListItem(pos);
		StringTokenizer st = new StringTokenizer(item);
		String num = st.nextToken();
		if (st.countTokens() > 0) {
			String size = st.nextToken();
			return Integer.parseInt(size);
		} else {
			return -1;
		}
	}
	
	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼPOPꆼꆼꆼꆼꆼRETRꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.<BR>
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.<BR>
	 * <OL>
	 *  <LI>ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ (CRLF.CRLF ꆼꆼꆼꆼꆼꆼꆼꆼ.CRLF ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ)ꆼ
	 *  <LI>ꆼꆼꆼꆼꆼꆼꆼꆼꆼ (CRLF.. -> CRLF. ꆼꆼꆼꆼꆼ)
	 * </OL>
	 *
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼclose() ꆼꆼꆼꆼꆼ
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 *
	 * @param	pos	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ 0.
	 * @return	ꆼꆼꆼꆼꆼꆼꆼꆼꆼ InputStream.
	 * @exception	jp.gr.java_conf.roadster.net.pop.POP3Exception	POP3ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * @exception	java.io.IOException	IOꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 */
	public synchronized InputStream retrieve(int pos) throws POP3Exception, IOException {
		if (messageInput != null) {
			messageInput.close();	// ꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
			messageInput = null;
		}
		
		if (messageList == null) {
			initList();
		}
		StringTokenizer tokenizer = new StringTokenizer(getListItem(pos));
		String num = tokenizer.nextToken();
		if (sendCommand(COMMAND_RETR + " " + num)) {
			messageInput = new POP3MessageInputStream(in);
			return messageInput;
		} else {
			throw new POP3NegativeResponseException(getStatusString());
		}
	}
	
	/**
	 * TOP ꆼꆼꆼꆼ. ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ InputStream ꆼꆼꆼ.
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 *
	 * @param	pos	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ 0.
	 * @param	number	ꆼꆼꆼꆼꆼꆼ.
	 * @return	ꆼꆼꆼꆼꆼꆼꆼꆼꆼ InputStream.
	 * @exception	jp.gr.java_conf.roadster.net.pop.POP3Exception	POP3ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * @exception	java.io.IOException	IOꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 */
	public synchronized InputStream top(int pos, int number) throws POP3NegativeResponseException, IOException {
		if (messageInput != null) {
			messageInput.close();	// ꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
			messageInput = null;
		}
		if (messageList == null) {
			initList();
		}
		StringTokenizer tokenizer = new StringTokenizer(getListItem(pos));
		String num = tokenizer.nextToken();
		if (sendCommand(COMMAND_TOP + ' ' + num + ' ' + number)) {
			messageInput = new POP3MessageInputStream(in);
			return messageInput;
		} else {
			throw new POP3NegativeResponseException(getStatusString());
		}
	}
	
	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 *
	 * @param	pos	ꆼꆼꆼꆼꆼꆼꆼ.ꆼꆼꆼꆼꆼꆼꆼꆼꆼ 0.
	 * @return	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ true.
	 * @exception	jp.gr.java_conf.roadster.net.pop.POP3Exception	POP3ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * @exception	java.io.IOException	IOꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 */
	public synchronized boolean delete(int pos) throws POP3NegativeResponseException, IOException {
		if (messageList == null) {
			initList();
		}
		StringTokenizer tokenizer = new StringTokenizer(getListItem(pos));
		String num = tokenizer.nextToken();
		return sendCommand(COMMAND_DELE + " " + num);
	}
	
	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼUID(unique-id)ꆼꆼꆼ.
	 *
	 * @param	pos	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * @return	UID.
	 * @exception	jp.gr.java_conf.roadster.net.pop.POP3Exception	POP3ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * @exception	java.io.IOException	IOꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 */
	public synchronized String getUID(int pos) throws POP3Exception, IOException {
		if (uidList == null) {
			initUIDList();
		}
		String item = uidList[pos];
		StringTokenizer st = new StringTokenizer(item);
		String num = st.nextToken();
		String uid = st.nextToken();
		return uid;
	}
	
	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 *
	 * @param	timeout	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 */
	public synchronized void setTimeout(int timeout) {
		this.timeout = timeout;
		if (socket != null) {
			try {
				socket.setSoTimeout(timeout);
			} catch (SocketException se) {
				se.printStackTrace();
			}
		}
	}
	
	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 *
	 * @return	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 */
	public synchronized int getTimeout() {
		return timeout;
	}
	
	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 *
	 * @param	command	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 */
	public synchronized void setPreConnectCommand(String command) {
		this.preConnectCommand = command;
	}
	
	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 *
	 * @return	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼnullꆼ
	 */
	public String getPreConnectCommand() {
		return preConnectCommand;
	}
	
	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * CRLF.CRLFꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.<BR>
	 * CRLF..CRLF ꆼ CRLF.CRLFꆼꆼꆼꆼꆼ.
	 */
	protected class POP3MessageInputStream extends InputStream {
		
		/**
		 * ꆼꆼꆼꆼꆼꆼꆼ.
		 */
		private final int PRE_READ_LENGTH = 4;
		private byte tmpbuff[] = new byte[PRE_READ_LENGTH];
		
		/**
		 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼPushbackInputStream ꆼꆼꆼꆼꆼ.
		 */
		protected PushbackInputStream pin;
		
		/**
		 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
		 */
		protected boolean finalByte = false;

		/**
		 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
		 */
		protected boolean eof = false;
		
		
		/**
		 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼInputStreamꆼꆼꆼꆼꆼ.
		 * @param	in	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.<BR>
		 *              ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		 */
		public POP3MessageInputStream(InputStream in) {
			this.pin = new PushbackInputStream(in, PRE_READ_LENGTH * 2);
		}
		
		/**
		 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		 * RFC1939ꆼꆼꆼꆼꆼCRLF.CRLF ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.<BR>
		 * ꆼꆼꆼCRLF.. ꆼꆼ CRLF. ꆼꆼꆼꆼꆼꆼ.
		 *
		 * @return	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ .CRLF ꆼꆼꆼꆼꆼꆼ.
		 *          ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ -1.
		 * @exception	java.io.IOException	IOꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		 */
		public synchronized int read() throws IOException {
			int ret;
			if (eof == true) {
				return -1;		// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ -1 ꆼꆼꆼ.
			} else {
				ret = pin.read();
				if (ret == -1 || finalByte == true) {
					eof = true;
					return ret;
				}
			}
			
			byte b = (byte) ret;
			if (b == CR) {
				
				// CR ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
				//
				//  ꆼꆼꆼꆼꆼꆼꆼꆼ
				// LF.CRLF
				// ꆼꆼꆼꆼꆼꆼꆼfinalByte ꆼ true ꆼꆼꆼꆼꆼꆼLFꆼ unread() ꆼꆼ.
				// (PushbackInputStream#unread(-1) ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
				//  -1 ꆼ unread() ꆼꆼꆼꆼ.)
				//
				//  ꆼꆼꆼꆼꆼꆼꆼꆼ
				// LF..
				// ꆼꆼꆼꆼꆼꆼꆼꆼCRLF.. -> CRLF. ꆼꆼꆼꆼꆼꆼꆼꆼ
				// LF ꆼ . ꆼ unread() ꆼꆼ.
				//
				//  ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
				// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ unread() ꆼꆼ.
				for (int i = 0; i < tmpbuff.length; ++i) {
					int c = pin.read();
					if (c == -1) {
						throw new EOFException();
					}
					tmpbuff[i] = (byte) c;
				}
				boolean needsUnread = true;
				if (tmpbuff[0] == LF && tmpbuff[1] == 46) {
					if (tmpbuff[2] == CR && tmpbuff[3] == LF) {	// LF.CRLF
						finalByte = true;
						pin.unread(LF);			
						needsUnread = false;	
						// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
						// { LF, -1 }
						// ꆼꆼꆼ.
					} else if (tmpbuff[2] == 46) {				// LF ..
						pin.unread(tmpbuff[3]);	// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ unread() .
						pin.unread(46);
						pin.unread(LF);
						needsUnread = false;
						// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
						// { LF, '.', tmpbuff[3], ... }
						// ꆼꆼꆼ.
					}
				}
				if (needsUnread == true) {
					pin.unread(tmpbuff, 0, tmpbuff.length);	// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
				}
			}
			return ret;
		}
		
		/**
		 * ꆼꆼꆼꆼꆼꆼꆼꆼ close() ꆼꆼ.
		 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		 *
		 * @exception	java.io.IOException	IOꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		 */
		public /* synchronized */ void close() throws IOException {
			int i;
			while ((i = read()) != -1) {
				// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
			}
			messageInput = null;	// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		}
		
		/**
		 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		 *
		 * @return	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		 * @exception	java.io.IOException	IOꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		 */
		public synchronized int available() throws IOException {
			return pin.available();
		}
	}

	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼPOPꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 *
	 * @param	args	ꆼꆼꆼꆼꆼPOPꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * @exception	java.lang.Exception	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 */
	public static void main(String args[]) throws Exception {
		POP3Client pop = new POP3Client();
		pop.setDebug(true);
		pop.setHost(args[0]);
		pop.setUser(args[1]);
		pop.setPassword(args[2]);
		if (args.length >= 4 && "APOP".equals(args[3])) {
			pop.setAuthorizationMode(POP3Client.APOP_AUTHORIZATION);
		}
//		pop.setPreConnectCommand("ssh -C -f msingh@popserver -L 11110:popserver:110 sleep 5");
//		pop.setPreConnectCommand("rundll32 rnaui.dll,RnaDial ꆼꆼꆼꆼꆼ");
		pop.connect();
		int count = pop.getMessageCount();
		System.out.println("Message count = " + count);
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		for (int i = 0; i < count; ++i) {
			int messageSize = pop.getMessageSize(i);
			System.out.println("Message size = " + messageSize + " octet.");
			System.out.println("Message UID  = " + pop.getUID(i) + ".");
			InputStream in = pop.retrieve(i);
			int c;
			int bytesRead = 0;
			while ((c = in.read()) != -1) {
				System.out.print((char) c);
				bytesRead++;
			}
			if (bytesRead == messageSize) {
				System.out.println("bytesRead == messageSize");
			} else {
				System.out.println("bytesRead != messageSize");
				System.out.println("\tbytesRead = " + bytesRead);
				System.out.println("\tmessageSize = " + messageSize);
			}
			
			System.out.flush();
			
			System.err.print("Enter TOP command line number > ");
			String line = br.readLine();
			in = pop.top(i, Integer.parseInt(line));
			while ((c = in.read()) != -1) {
				System.out.print((char) c);
			}

			System.err.print("Delete this message ? (y/N) >");
			System.err.flush();
			
			line = br.readLine();
			if ("y".equals(line)) {
				pop.delete(i);
			}
		}
		pop.disconnect();
	}

	public boolean isSsl() {
		return ssl;
	}

	public void setSsl(boolean ssl) {
		this.ssl = ssl;
	}
}

⌨️ 快捷键说明

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