POP3 клиент не получает приветствие от сервера в C++

Я пытаюсь написать простой POP3-клиент, который будет подключаться к серверу pop.gmail.com и получать от него приветствие. Но после подключения к серверу я не могу получить от него никакой информации. Вот мой код до сих пор:

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>

#define DEFAULTSIZE 512

#pragma comment(lib,"ws2_32.lib")

int main(int argc , char *argv[])
{
    WSADATA wsa;
    SOCKET s;
    struct hostent *remoteHost;
    struct sockaddr_in addr;
    char server_reply[DEFAULTSIZE];
    int recv_size;

    //Initializing winsock
    printf("Initialising Winsock...");
    if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
    {
        printf("Initialising Winsock f ailed. Error Code : %d",WSAGetLastError());
        return 1;
    }

    printf("Initialised.\n");

    remoteHost = gethostbyname("pop.gmail.com");

    //Creating socket
    if((s = socket(remoteHost->h_addrtype, SOCK_STREAM, 0)) == INVALID_SOCKET){
        printf("Could not create socket : %d", WSAGetLastError());
        return 1;
    }
    printf("Socket created.\n");

    //Initializing address
    memcpy(&addr.sin_addr, remoteHost->h_addr_list[0], remoteHost->h_length);
    addr.sin_family = remoteHost->h_addrtype;
    addr.sin_port = htons( 995 );

    //Connecting socket to the address
    if(connect(s, (struct sockaddr *)&addr, sizeof(addr)) < 0){
        printf("Connecting socket failed. Error Code : %d",WSAGetLastError());
        return 1;
    }
    printf("Socket connected\n");

    //Receiving information from the server
    if((recv_size = recv(s, server_reply, DEFAULTSIZE, 0)) == SOCKET_ERROR){
        printf("Receiving information failed. Error Code : %d",WSAGetLastError());
        return 1;
    }

    printf("Size of how much information has been received: %d\n", recv_size);
    for(int i = 0; i < recv_size; ++i){
        printf("%c", server_reply[i]);
    }
    printf("\n");

    //Checking if socket is connected
    int error_code;
    int error_code_size = sizeof(error_code);
    getsockopt(s, SOL_SOCKET, SO_ERROR, (char*)&error_code, &error_code_size);
    printf("Socket state: %d\n", error_code);

    closesocket(s);
    WSACleanup();

    return 0;
}

Насколько я понимаю из спецификации RFC, я должен получить приветствие от сервера, что-то вроде "+OK POP3 server ready", но я вообще ничего не получаю (recv_size = 0 и error_code = 0). Я попытался подключиться к разным серверам с одинаковыми результатами... Я что-то упустил из документации POP3 или что-то не так с кодом?

Любая помощь высоко ценится!

0 ответов

Другие вопросы по тегам