Добрый день, в общем нужно сделать простейший IMAP клиент на сокетах.
#include "stdafx.h"
#include <cstdio>
#include <iostream>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <windows.h>
using namespace std;
#pragma comment(lib, "Ws2_32.lib")
#define BUFSIZE 1024
int _tmain(int argc, _TCHAR* argv[])
{
int recvSize=1;
char buf[BUFSIZE];
char msg[BUFSIZE];
WSADATA wsda;
int sock;
struct hostent *host;
struct sockaddr_in server_addr;
short int s_port = 143;
const char *s_ipaddr = "imap.mail.ru";
WSAStartup(MAKEWORD(2,2), &wsda);
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(s_port);
server_addr.sin_addr.s_addr = inet_addr(s_ipaddr);
if(server_addr.sin_addr.s_addr == INADDR_NONE)
{
host = NULL;
host = gethostbyname(s_ipaddr);
if(host == NULL)
{
return false;
}
memcpy(&server_addr.sin_addr, host->h_addr_list[0], host->h_length);
}
if (connect(sock, (struct sockaddr *) &server_addr, sizeof(server_addr)))
{
printf (" Connect error %d \n ", WSAGetLastError ( ) );
getchar();
return -1;
}
ZeroMemory(buf,BUFSIZE);
ZeroMemory(msg,BUFSIZE);
recv (sock,buf,sizeof(buf),0);
cout << buf << "\n";
cout << "Logging-in:\n";
///////// отправляет комманду логин
strcpy(msg,"a001 LOGIN oksoff ****\r\n");
send(sock, msg, strlen(msg), 0);
cout << msg << "\n";
recv(sock,buf,sizeof(buf),1);
cout << buf << "\n";
getchar();
closesocket(sock);
WSACleanup();
return 0;
}
Проблема в том, что после принятия приветствия, сервер не реагирует ни на какие команды, то есть просто ничего не приходит на recv. RFC читал, команды отправляю вроде правильно
http://s017.radikal.ru/i434/1304/5a/e4837f013372.jpg
Продвижение своими сайтами как стратегия роста и независимости