Исключение: Read timed out сокет

Имеется простой POP3 клиент на Java. По задумке должен уметь просто посылать базовые запросы на сервер pop.gmail.com или pop.mail.ru. Однако по какой-то причине не могу получить даже приветственное сообщение, хотя соединения(судя по дебаггингу) устанавливается. Порты вроде бы открыл, даже на роутере пробросил на всякий случай, ничего не помогает. Пробовал как 995, так и 110(при 110 даже не устанавливается соединение). В чем может быть дело? Привожу ниже небольшой код:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class Pop3Client {

    public static void main(String[] args) throws Exception {

        // Указываем параметры подключения
        String host = "pop.gmail.com";
        int port = 995;
        String username = "*****@gmail.com";
        String password = "*********";

        // Устанавливаем соединение
        Socket socket = new Socket(host, port);
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        OutputStreamWriter writer = new OutputStreamWriter(socket.getOutputStream());
        String response = reader.readLine();
        System.out.println(response);

        // Отправляем команду USER
        String command = "USER " + username + "\r\n";
        writer.write(command);
        writer.flush();
        response = reader.readLine();
        System.out.println(response);

        // Отправляем команду PASS
        command = "PASS " + password + "\r\n";
        writer.write(command);
        writer.flush();
        response = reader.readLine();
        System.out.println(response);

        // Отправляем команду STAT
        command = "STAT\r\n";
        writer.write(command);
        writer.flush();
        response = reader.readLine();
        System.out.println(response);

        // Получаем количество сообщений в почтовом ящике
        String[] responseParts = response.split(" ");
        int messageCount = Integer.parseInt(responseParts[1]);

        // Получаем текст сообщений
        for (int i = 1; i <= messageCount; i++) {
            // Отправляем команду RETR
            command = "RETR " + i + "\r\n";
            writer.write(command);
            writer.flush();
            response = reader.readLine();
            System.out.println(response);
            while (!response.startsWith(".")) {
                response = reader.readLine();
                System.out.println(response);
            }
        }

        // Отправляем команду QUIT
        command = "QUIT\r\n";
        writer.write(command);
        writer.flush();
        response = reader.readLine();
        System.out.println(response);

        // Закрываем соединение
        socket.close();
    }
}

Ответы (0 шт):