Шаг 29 - Поддержка сокетов MFC передача данных в сокет

Мы данную возможность попробуем на основе почтового протокола. Нам нужно в ответ поздороваться с сервером вот по такой схеме. Все подробности в RFC 821.

HELO <SP> <domain> <CRLF>

В ответ сервер поздоровается с нами. Для отправки данных у нас есть функция Send():

virtual int Send( const void* lpBuf, int nBufLen, int nFlags = 0 );

При успешном выполнении функция вернет количество отосланных символов иначе SOCKET_ERROR. Итак, пробуем:

void CTestConnectDlg::OnConnect() 
{
	WSADATA wsaData; 
	if (!AfxSocketInit(&wsaData))
	{
		AfxMessageBox("Error Unit");
		return;
	}

	CSocket sa;
	sa.Create();
	if (sa.Connect("pop.yandex.ru",25))
	{
		char buffer[255];
		sa.Receive(buffer,sizeof(buffer));
		m_Reserve.AddString(buffer);
		char bufferhello[512];
		strcpy(bufferhello,"HELO USC-ISIF.ARPA\r\n");
		if (sa.Send(bufferhello,strlen(bufferhello))!=SOCKET_ERROR)
		{
			sa.Receive(buffer,sizeof(buffer));
			m_Reserve.AddString(buffer);
		}
		else AfxMessageBox("Error Send");
	} 
	sa.Close(); 	
}

gif/29_1.gif (2557 b)

И смотрим, что будет в ответ. Сервер ответит, как положено. Обратите внимание на то, что я узнал свой домен. Я передал серверу домен из RFC какой попало, a в ответ он мне выдал www.hera.sakha.ru спасибо однако. Кстати для интереса можете попробовать команду HELP только учтите, что буфер нужен большой.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 17.11.2001