我在從我連接到SMTP和POP服務器的套接字寫一個BufferedReader插座響應的文字讀取字符。但是,我怎麼知道我是否已經閱讀,直到回覆結束,以避免read()
因讀取超出服務器響應而掛起?下面的代碼是如何,我從BufferedReader中閱讀:如何確定SMTP和POP響應的結束?
boolean endOfResponse = false;
while(!endOfResponse) {
c = in.read();
if ((c >= 32 && c < 127) || c == '\t' || c == '\r' || c == '\n') {
response.append((char)c);
//The following check has a problem: If the response has multiple lines, the other lines will not be read.
if(c == '\n') endOfResponse = true;
}
}
例如,POP,當我做了LIST
,響應與.
結束。但在SMTP中,當我執行EHLO
時,它並沒有清楚地表明響應何時結束。
採用in.read() == -1
,可悲的是,沒有工作,因爲它仍然會嘗試讀取超出響應數據,使插座掛起。
那麼,如何確定一個SMTP和POP的反應結束?更妙的是,甚至有可能事先知道我應該從緩衝區讀取多少字節,以便我甚至不必檢查響應的結束?
您是否知道JavaMail的存在,實現所有這些協議並提供抽象他們上面一層? http://www.oracle.com/technetwork/java/javamail/index.html。即使你不想使用它,它也是開源的,所以你可能想看看它是如何工作的。 –