Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Упрощенный клиент НТТР



Теперь вариант со стороны клиента – простая программа, которая выполняет слепой (blind) запрос GET. Когда сервер принимает запрос GET с косой чертой, показанный ниже, он возвращает HTML-файл по умолчанию.

GET / HTTP/1.0

Если в браузере ввести http://www.slowsoft.com, он отправит слепой запрос GET.

Программа-клиент может использовать тот же самый класс CHttpBlockingSocket; она должна инициализировать Winsock так же, как это делает сервер. Обработчик команды просто запускает рабочий поток при помощи следующего вызова:

AfxBeginThread(ClientSocketThreadProc, GetSafeHwnd());

Вот код клиентского потока:

CString g_strServerName = “localhost”; //или другое имя хоста

UINT ClientSocketThreadProc(LPVOID pParam)

{

CHttpBlockingSocket sClient;

char* buffer = new char[MAXBUF];

int nBytesReceived = 0;

char request[] = "GET / HTTP/1.0\r\n";

char headers[] =

"User-Agent: Mozilla/1.22 (Windows; U; 32bit)\r\n"

"Accept: */*\r\n"

"Accept: image/gif\r\n"

"Accept: image/x-xbitmap\r\n"

"Accept: image/jpeg\r\n"

"\r\n"; // это необходимо

CSockAddr saServer, saClient;

try {

sClient.Create();

saServer = CBlockingSocket::GetHostByName(g_strServerName, 80);

sClient.Connect(saServer);

sClient.Write(request, strlen(request), 10);

sClient.Write(headers, strlen(headers), 10);

do { // прочитать все заголовки ответа сервера

nBytesReceived = sClient.ReadHttpHeaderLine(buffer, 100, 10);

} while(strcmp(buffer, "\r\n")); // до первой пустой строки

nBytesReceived = sClient.ReadHttpResponse(buffer, 100, 10);

if(nBytesReceived == 0) {

AfxMessageBox("Ответ не получен. Bad URL?");

}

else {

buffer[nBytesReceived] = '\0';

AfxMessageBox(buffer);

}

}

catch(CBlockingSocketException* e) {

// зарегистрировать исключение

e->Delete();

}

sClient.Close();

delete [] buffer;

return 0; // поток завершен

}

Поток сначала вызывает CBlockingSocket::GetHostByName для получения IP-адреса сервера. Затем он создает сокет и вызывает Connect. Теперь есть двусторонний канал связи с сервером. Поток посылает запрос GET, за которым следуют несколько заголовков запроса, считывает заголовки ответа сервера и сам ответный файл, который предполагается текстовым. После вывода текста в окне сообщения поток завершается.

Индивидуальные задания:

  1. Передать из одной программы в другую текстовый файл.
  2. Передать из одной программы в другую двоичный файл.
  3. Во время набора текста в одной программе одновременно выводить текст в окне другой.
  4. При перемещении окна выводить в другой программе координаты перемещаемого окна.





Дата публикования: 2014-11-29; Прочитано: 194 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...