Шаг 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, который вы вводили для обращения к серверу.

gif/9_1.gif (10720 b)


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 19.01.2000