Реферат Курсовая Конспект
Серверный поток - Лабораторная Работа, раздел Образование, Тема: Взаимодействие процессов через механизм гнезд Теперь Взглянем На Функцию Serverthreadproc: &n...
|
Теперь взглянем на функцию ServerThreadProc:
UINT ServerThreadProc(LPVOID pParam)
{CSockAddr saClient;
CHttpBlockingSocket sConnect;
char request[100];
char headers[] = "HTTP/1.0 200 OKrn"
"Server: Inside Visual C++ EX34Arn"
"Date: %srn"
"Content-Type: text/htmlrn"
"Accept-Ranges: bytesrn"
"Content-Length: 500rn";
"rn"; //очень важная пустая строка
char html[] =
"rn"
"<html>rn"
"<head><title>Inside Visual C++ Server</title></head>rn"
"<body><body background="usa1.jpg">rn"
"<h1><center>This is a custom home page</center></h1><p>rn"
"<a href="default.htm"> SlowSoft’s Home Page</a><p>rn"
"</body></html>rnrn";
try {
if(!g_sListen.Accept(sConnect, saClient)) {
// обработчик в классе «вид» закрыл ожидающий сокет
return 0;
}
AfxBeginThread(ServerThreadProc, pParam);
// прочитать запрос от клиента
sConnect.ReadHttpHeaderLine(request, 100, 10);
TRACE("SERVER: %s", request); //напечатать первый заголовок
if(!strncmp(request, "GET", 3)){
do // обработать остальные заголовки запроса
{
sConnect.ReadHttpHeaderLine(request, 100, 10);
TRACE("SERVER: %s", request);
} while(strcmp(request,"rn"));
//*/
sConnect.Write(headers, strlen(headers), 10); // заголовки ответа
sConnect.Write(html, strlen(html), 10); // код HTML
}
else {
TRACE("SERVER: not a GETn");
// не знаю, что делать
}
}
catch(CBlockingSocketException* e) {
// Делаем что-то с исключением
e->Delete();
}
// g_sListen.Close();
sConnect.Close();}
Наиболее важным является вызов Accept. Поток кода блокируется до тех пор, пока клиент не подсоединится к порту 80 сервера, после чего Accept вернет новый сокет sConnect. Текущий поток сразу же запускает другой поток.
Между тем текущий поток должен обработать запрос клиента, который пришел на sConnect. Сначала считываются все заголовки запроса путем вызова ReadHttpHeaderLine до тех пор, пока не обнаружится пустая строка. Затем вызывается Write для отправки заголовков и HTML-операторов ответов. Наконец текущий поток вызывает Close для закрытия соединения через сокет. Конец жизни данного соединения. Следующий поток остается блокированным на вызове Accept, ожидая следующего соединения.
– Конец работы –
Эта тема принадлежит разделу:
Лабораторная работа... Тема Взаимодействие процессов через механизм гнезд... Цель Научиться передавать данные и сообщения между процессами компьютеров глобальной сети...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Серверный поток
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов