|
Шаг 11 - Четыре этапа транзакции HTTP
Установка соединения
Перед обменом информации клиент и сервер должны иметь соединение TCP, именно по этому мы устанавливали соединение Internet. То есть нам нужен был IP адрес. Как различаются разные протоколы ? Для этого используются уникальные номера. Эти номера называются портами. Для HTTP стандартный порт 80. Вот список наиболее известных портов.
FTP 21
TELNET 23
SMTP 25
TFTP 69
Gopher 70
Finger 79
HTTP 80
Порты делятся на 2 части. С адресами ниже 1024 привелигированные вы не сможете создать свой порт с номером меньше 1024. Мы с вами в нашей программе указывали номер порта создавая сокет.
#define PORT_ADDR 80
........
socketaddr.sin_port = htons(PORT_ADDR);
if (bind(servsocket,(LPSOCKADDR)&socketaddr,sizeof(socketaddr)) == SOCKET_ERROR)
Запрос Клиента
Каждый запрос клиента передаваемый на WEB-сервер начинается с метода, за которым следует URL объекта. Далее идет информация о версии протокола HTTP и символ возврата каретки с переводом строки. Метод - это команда клиента к серверу с целью указания запроса. Мы его не обрабатывали. Научимся :-)
Ответ сервера
После получения сообщения сервер отвечает сообщением HTTP. Затем идет код статуса и тема ответа из 3 цифр, потом дополнительная информация, а потом тело ответа. Если обратите внимание, что мы с Вами это упустили. Ну и ладно исправим потом. А вот данные мы посылали так.
CString buff="\nСайт шаг за шагом представляет\n\r\n";
HTTPServer.SendData(buff.GetBuffer(1000));
..........
void CSeverWinSock::SendData(LPSTR buff)
{
int Errors;
Errors = send(clientsocket,(LPSTR)buff,lstrlen(buff),0);
if (Errors == SOCKET_ERROR) AfxMessageBox("Error Send");
}
Сервер разрывает соединение
После отправки сообщения сервер имеет возможность разорвать соединение. Вот так мы это делали закрывая сокет.
closesocket(HTTPServer.clientsocket);
Предыдущий шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|