Перед обменом информации клиент и сервер должны иметь соединение 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);