我想實現一個簡單的IMAP客戶端。我可以連接到服務器,收到它的問候語,但似乎在login
命令後收到響應時出現問題。Java中的IMAP客戶端(僅限套接字)在接收時掛起
我知道IMAP行以\r\n
或.\r\n
結尾,但似乎一次只讀一個字節根本不起作用,我不知道爲什麼。
我的代碼:
class NewClass {
public static String readAll(Socket socket, String end) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while (!sb.toString().endsWith(end))
{
char c = (char)reader.read();
sb.append(c);
}
return sb.toString();
}
public static void main(String[] args) throws IOException {
String host = "x.x.x.x";
int port = 143;
Socket socket = new Socket(host, port);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
// server's greeting
String initreply = readAll(socket, "\r\n");
System.out.println(initreply);
// log me in
String login_cmd = "A1 LOGIN user pass\r\n";
writer.print(login_cmd);
writer.flush();
String loginreply = readAll(socket, "\r\n");
System.out.println(loginreply);
}
}
Oy,您每次閱讀時都會創建新的BufferedReaders。每個緩衝讀取器可能會預讀,然後將其扔掉。 – Max