Java,SSLSocket,没有收到任何答复

标签 java sockets ssl imap

我正在尝试在 Java 中将 SSL 与 IMAP 结合使用。我不想使用 IMAP 类。 出于某种原因,当我发送第 n 条消息时,我收到了消息 n-2 的回复,而不是消息 n-1 的回复。这意味着在发送第二条消息之前,我不会收到对发送的第一条消息的任何答复。任何人都可以发现以下最少代码中的错误吗? (它确实很小,除了 println,我猜它有助于调试)

import java.io.*;
import javax.net.ssl.*;
public class Mail{
    static String server = "imap.gmail.com";
    static String user   = "straightouttascript@gmail.com";
    static String pass   = "azerty75";
    public static void print (PrintWriter to, String text){
        System.out.println("sent : "+text);
        to.println(text+ "\r");
        to.flush();
    }

    public static void read  (BufferedReader from) throws InterruptedException, IOException {
        do {
            String line = from.readLine();
            System.out.println("received: "+line);
        } while (from.ready());
    }

    public static void main(String[] args){
        try{
            SSLSocket sslsocket = (SSLSocket) SSLSocketFactory.getDefault().createSocket(server, 993);
            System.out.println("Start connexion");

            BufferedReader from = new BufferedReader(new InputStreamReader(sslsocket.getInputStream()));
            //             read(from);

            PrintWriter to = new PrintWriter(new BufferedWriter(new OutputStreamWriter(sslsocket.getOutputStream())), true);
            print(to,"a1 login "+user+" "+pass);
            read(from);/*exepcted:
                         OK gimap ready 
                         a1 OK login@host authenticated (Success)*/

            sslsocket.close();
            System.out.println("End connexion");
        }

        catch (Exception e){ 
            e.printStackTrace();
        }
    } 
}

最佳答案

IMAP 不是乒乓协议(protocol)。服务器不会发送一行来响应您的请求。

相反,您发送命令,服务器发送信息。服务器被允许向您发送比您请求的信息更多的信息,因此您可以对一个命令获得七个响应,甚至根本不发送命令也可以获得响应,这被称为未经请求的响应。奇怪的短语。一些服务器使用未经请求的响应来通知您有新邮件,more 用于通知您消息上的标志更改,以及(几乎?)all 用于通知您他们即将关闭您的连接。

关于Java,SSLSocket,没有收到任何答复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35712788/

相关文章:

java.lang.NoClassDefFoundError - 生成可执行 Jar

java - 我们如何将列表对象从jsp传递到struts2 Action ?

java - Java套接字中的函数 'receive'是如何设计的?

java - 为什么在没有定义静态的情况下出现非静态引用错误?

java - 将对象写入套接字

java - Java和C++之间的套接字通信

ios - 信任 iOS 13 上基于 TLS 的 WebSocket 的自签名证书

ssl - 带有 SSL 证书的 Grails 3.3.5

amazon-web-services - 将证书/ key 上传到 AWS 负载均衡器

java - 轮盘预测