Последовательные серверы с установлением логического соединения (TCP)
10.1. Введение
В предыдущей главе приведен пример последовательного сервера, в котором используется UDP в качестве транспортного протокола без установления логического соединения. В настоящей главе показано применение в последовательном сервере протокола TCP в качестве транспортного протокола с установлением логического соединения. Этот пример сервера соответствует алгоритму 8.1.
10.2. Распределение пассивного сокета TCP
Как было указано в главе 9, в сервере с установлением логического соединения для распределения потокового сокета и привязки его к общепринятому порту предлагаемой службы может применяться процедура passiveTCP.
Процедура passiveTCP принимает два параметра. Первый параметр, символьная строка, задает имя или номер службы, а второй указывает желаемую длину очереди входящих запросов на установление соединения. Если первый параметр содержит имя, он должен соответствовать одной из записей в базе данных служб, к которой обращается библиотечная функция getservbyname. Если первый параметр задает номер порта, то он должен представлять это число в виде текстовой строки (например, 79).
/* Файл passiveTCP.с - процедура passiveTCP */ int passivesock(const char *service, const char *transport, int qlen); /* * Процедура passiveTCP - создает пассивный сокет для использования * в сервере TCP * */
int
passiveTCP(const char *service, int qlen) /*
* Параметры:
* service - служба, связанная с требуемым портом
* qlen - максимальная длина очереди запросов сервера */
{
return passivesock(service, "tcp", qlen);
}
10.3. Сервер службы DAYTIME
Как было отмечено в главе 7, служба DAYTIME позволяет пользователю одного компьютера получить значение текущей даты и времени суток с другого компьютера. Поскольку служба DAYTIME предназначена для использования людьми, ее спецификация определяет, что сервер при отправке ответа должен отформатировать дату в виде удобной для восприятия строки текста ASCII. Поэтому клиентская программа может отобразить ответ для пользователя точно в таком же формате, в каком он был получен.
В главе 7 показано, как используется в клиентской программе протокол TCP для доступа к серверу DAYTIME и отображения текста, возвращенного сервером. Поскольку операции получения и форматирования даты требуют небольшого объема обработки, а предполагаемая интенсивность использования этой службы невелика, то нет необходимости оптимизировать скорость работы сервера DAYTIME. Лучшая упаковка! Воздушно пузырчатая пленка на http://www.aeropak.ru/ от производителя. Если новые клиенты попытаются выполнить свои запросы на установление соединения в то время, когда сервер занят обработкой другого запроса, программное обеспечение протокола поставит эти запросы в очередь. Поэтому для данного сервера вполне подходит последовательная реализация.