Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,SSLSocket,未收到应答_Java_Sockets_Ssl_Imap - Fatal编程技术网

Java,SSLSocket,未收到应答

Java,SSLSocket,未收到应答,java,sockets,ssl,imap,Java,Sockets,Ssl,Imap,我正在尝试在java中将SSL与IMAP结合使用。我不想使用IMAP类。 出于某种原因,当我发送第n条消息时,我收到的是消息n-2的答案,而不是消息n-1的答案。这意味着在发送第二条消息之前,我不会收到第一条消息的任何答复。有人能发现以下最小代码中的错误吗?(它确实是最小的,除了println,我想这有助于调试) IMAP不是乒乓球协议。服务器不会发送一行响应您的请求 相反,您发送命令,服务器发送信息。服务器允许向您发送比您要求的更多的信息,因此您可以对一个命令获得七个响应,甚至可以在根本不发送

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


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


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

为什么不使用JavaMail?您确定要发送CRLF对吗?而不仅仅是换行?@EJP我的目标之一是取消对套接字的访问,尤其是安全访问socket@MAX.编辑后添加,即使在函数末尾添加+“\r”,也不会改变任何内容。那么为什么不选择更简单的?我建议您从一个简单的echo服务器和客户端开始。你还没来得及走路,IMAP就开始跑了。我知道这一切。我的问题不是我得到的更多,而是我得到的不够。也就是说,有时在向服务器发送新命令之前,我的命令没有得到任何响应,而另一次(有更大的示例),我收到响应的第一部分,然后什么都没有,而响应没有结束。IMAP实际上不是乒乓协议。试着启动另一个线程并在那里调用read(),你就会明白我的意思:当服务器有话要对你说时,它会向你发送响应,而不检查你或它是否有乒乓球。只需制作一个线程,并在该线程中始终读取响应。
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();
        }
    } 
}