|
Шаг 9 - Посылаем документ
Создаем проект
Проект мы оставим старый нам нужно внести изменения всего в одну функцию OnServerAccept
Создаем код
afx_msg LRESULT CHTTPServerView::OnServerAccept(WPARAM wParam, LPARAM lParam)
{
CHTTPServerDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
HTTPServer.clientsocket = INVALID_SOCKET;
pDoc->csInfo = "Client Connect !!!!!";
Invalidate();
if (WSAGETASYNCERROR(lParam))
{
AfxMessageBox("Error detecting Client");
return 0L;
}
if (WSAGETSELECTEVENT(lParam) == FD_ACCEPT)
{
int length=sizeof(SOCKADDR);
SOCKADDR_IN socketclientaddr;
HTTPServer.clientsocket=accept(HTTPServer.servsocket,(LPSOCKADDR)&socketclientaddr, (LPINT) &length);
if (HTTPServer.clientsocket == INVALID_SOCKET)
{
AfxMessageBox("Invalid Client Socket");
return 0L;
}
CString buff="< html >\n< p >Сайт шаг за шагом представляет\n< /html >\r\n";
HTTPServer.SendData(buff.GetBuffer(1000));
closesocket(HTTPServer.clientsocket);
}
return 0L;
}
Вот код в процедуру передаются параметры, в том числе и что произошло обращение FD_ACCEPT. В самом начале мы проверяем параметры. И если все нормально accept для создания сокета клиента. После чего можно посылать данные. Посылку данных я вынес в отдельную процедуру.
void CSeverWinSock::SendData(LPSTR buff)
{
int Errors;
Errors = send(clientsocket,(LPSTR)buff,lstrlen(buff),0);
if (Errors == SOCKET_ERROR) AfxMessageBox("Error Send");
}
После посылки данных сокет можно закрыть.
В большой степени абстракции можно весь данный процесс со стороны сервера представить как
socket()
bind()
WSAAsyncSelec()
linten()
if accept send()
closecoket()
Вот такой результат работы нашего сервера. Только одно предупреждение. После запуска подождите немного. И иногда при запросе сервер не отвечает. Но очень редко. Есть и еще одна мелочь. После обращения к серверу в каталоге Windows\Internet Temporary помешается временный файл. Если хотите тестировать удаляйте его после каждого обращения, иначе страница будет загружаться оттуда. Имя её будет IP, который вы вводили для обращения к серверу.
Загрузить проект | Предыдущий шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|