
17.01.2010, 19:23
|
|
Новичок
Регистрация: 16.12.2009
Сообщений: 14
Провел на форуме: 20162
Репутация:
0
|
|
Сообщение от Spy2ex
У тебя буффер один под запрос и ответ. text[]
либо обнуляй после каждого запроса -ответа, либо введи дополнительный.
Код:
#include <iostream>
#include <winsock2.h>
using namespace std;
int main()
{
int err;
WSADATA wsaData;
SOCKET s;
hostent *d_addr;
struct sockaddr_in addr;
char rec[1024];//áóôåð âõîäíûõ ñîîáùåíèé
char sen[1024];//áóôåð èñõ ñîîáùåíèé
err = WSAStartup(MAKEWORD(1, 1), &wsaData);
if(err != 0)
{
cout<<"Error: "<<err<<"\n";
return 1;
}
cout<<"Ha4aJIo Pa6oTIb c coketamu\n";
//Ñîçäàíèå ñîêåòà
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(s == INVALID_SOCKET)
{
cout<<"Invalid socket\n";
return 1;
}
//ïîëó÷åíèå àäðåñà ñåðâåðà
d_addr = gethostbyname("smtp.mail.ru");
if(d_addr == NULL)
{
cout<<"Error gethostbyname\n";
return 1;
};
//ñîåäèíÿåìñÿ
addr.sin_family = AF_INET;//òèï TCP/IP
addr.sin_addr.s_addr = *((unsigned long *) d_addr->h_addr);
addr.sin_port = htons (25);
//connect
if(SOCKET_ERROR == (connect(s, (sockaddr *) &addr, sizeof (addr))))
{
cout<<"Error in connect\n";
return 1;
} else
{
cout<<"YsneLIIHoe coegunenue\n";
}
memset(rec, 0, sizeof(rec));
memset(sen, 0, sizeof(sen));
//ïîëó÷àåì äàííûå îò ñåðâåðà
recv(s, rec, sizeof(rec), 0);
cout<<rec<<"\n";
//î÷èñòêà
memset(rec, 0, sizeof(rec));
//Ïðèâåòñòâóåì ñåðâåð
strcpy(sen, "HELO smtp.mail.ru\r\n");
send(s, sen, sizeof(sen), 0);
cout<<sen<<"\n";
//î÷èñòêà
memset(sen, 0, sizeof(sen));
recv(s, rec, sizeof(rec), 0);
cout<<rec<<"\n";
memset(rec, 0, sizeof(rec));
//àâòîðèçàöèÿ íà ñåðâåðå
strcpy(sen, "AUTH LOGIN\r\n");
send(s, sen, sizeof(sen), 0);
cout<<sen<<"\n";
//î÷èñòêà
memset(sen, 0, sizeof(sen));
recv(s, rec, sizeof(rec), 0);
cout<<rec<<"\n";
memset(rec, 0, sizeof(rec));
closesocket(s);
WSACleanup();
return 0;
}
Вот ввел два буфера, и все равно сервак ругается на не правильную команду 500 (( дело в AUTH LOGIN
|
|
|