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

Серверный поток



Теперь взглянем на функцию ServerThreadProc:

UINT ServerThreadProc(LPVOID pParam)

{CSockAddr saClient;

CHttpBlockingSocket sConnect;

char request[100];

char headers[] = "HTTP/1.0 200 OK\r\n"

"Server: Inside Visual C++ EX34A\r\n"

"Date: %s\r\n"

"Content-Type: text/html\r\n"

"Accept-Ranges: bytes\r\n"

"Content-Length: 500\r\n";

"\r\n"; //очень важная пустая строка

char html[] =

"\r\n"

"<html>\r\n"

"<head><title>Inside Visual C++ Server</title></head>\r\n"

"<body><body background=\"usa1.jpg\">\r\n"

"<h1><center>This is a custom home page</center></h1><p>\r\n"

"<a href=\"default.htm\"> SlowSoft’s Home Page</a><p>\r\n"

"</body></html>\r\n\r\n";

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,"\r\n"));

//*/

sConnect.Write(headers, strlen(headers), 10); // заголовки ответа

sConnect.Write(html, strlen(html), 10); // код HTML

}

else {

TRACE("SERVER: not a GET\n");

// не знаю, что делать

}

}

catch(CBlockingSocketException* e) {

// Делаем что-то с исключением

e->Delete();

}

// g_sListen.Close();

sConnect.Close();}

Наиболее важным является вызов Accept. Поток кода блокируется до тех пор, пока клиент не подсоединится к порту 80 сервера, после чего Accept вернет новый сокет sConnect. Текущий поток сразу же запускает другой поток.

Между тем текущий поток должен обработать запрос клиента, который пришел на sConnect. Сначала считываются все заголовки запроса путем вызова ReadHttpHeaderLine до тех пор, пока не обнаружится пустая строка. Затем вызывается Write для отправки заголовков и HTML-операторов ответов. Наконец текущий поток вызывает Close для закрытия соединения через сокет. Конец жизни данного соединения. Следующий поток остается блокированным на вызове Accept, ожидая следующего соединения.





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



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