Создание серверной сокеты (пример на языке c).
Далее приведен отрывок из простейшего приложения архитектуры "клиент-сервер", то есть двухуровневого сетевого приложения. Полностью просмотреть тексты программ, самостоятельно откомпилировать их и запустить можно, воспользовавшись Приложениями к данному курсу. Здесь приводится только суть, а по сути работа серверной части по созданию сокеты сводится к четырем шагам:
Собственно создание серверной сокеты
"Связывание" созданной сокеты. Назначение ей конкретного адреса, порта, протокола.
Создание очереди запросов на соединение, перевод созданной сокеты в режим прослушивания (оператор listen() )
Обслуживание пришедшего запроса, получение дескриптора сокеты клиентского соединения (оператор accept() ). Это будет уже другая сокета, с помощью которой можно непосредственно общаться с данным конкретным клиентом. Созданная же на шаге 1 сокета остается в режиме ожидания входящих соединений. Если, конечно, это позволяется длиной сформированной нами очереди. Иными словами, если не превышено предельно допустимое для нашего сервера число соединений.
// Создаем сокету. Дескриптор на сокету выдается функцией
// операционной системы socket(). При этом указывается семейство
// допустимых для сокеты протоколов, ее тип. Последний параметр -
// "протокол" - в нашем случае не имеет смысла, так как два первых
// однозначно указывают на tcp/ip.
int sock_fd = socket( AF_INET, SOCK_STREAM, 0 );
// Заполняем адресную стуктуру для связывания сокеты с конкретным
// набором протокол-порт. Семейство протоколов - INET,
// порт определен в файлике common.h, в качестве адреса
// используем адрес локального интерфейса (127.0.0.1)
address.sin_family=AF_INET;
address.sin_port = htons(DEMO_PORT);
address.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
// "Связывание" сокеты. Вызов функции сообщает операционной
// системе, с каким адресом, протоколом и портом будет связана
// только что созданная сокета.
if ( bind( sock_fd, (struct sockaddr *) &address, sizeof(address) ) != 0 ) {
// Попытка связывания оказалась неудачной. Вполне возможно, уже есть
// процесс, слушающий данное сочетание порт-протокол.
perror("Bind:");
exit(2);
};
// На этом операторе выполнение программы будет приостановлено
// - до тех пор, пока не придет какой-нибудь клиент.
listen(sock_fd, 1 );
// Когда сервер готов обслужить очередной запрос на соединение, он
// использует функцию accept(). Результатом работы будет - другой дескриптор,
// описывающий уже конкретное клиентское соединение.
client_fd = accept(sock_fd, (struct sockaddr *) &client_addr, &len );
-
Содержание
- Оглавление
- Введение.
- Предмет рассмотрения данного курса.
- Одно-, двух- и многоуровневые приложения.
- Интернет.
- Адрес в интернете
- 2001:0Db8:11a3:09d7:1f34:8a2e:07a0:765d
- Имя в интернете
- Службы (сервисы)
- Сокета.
- Что такое "сокета" (socket) ?
- Создание серверной сокеты (пример на языке c).
- Сериализация
- Основы верстки: таблицы
- Основы верстки: фреймы
- Основы верстки: позиционирование участков сайта
- Протокол http
- Структура запроса (Request).
- Структура ответа (Response).
- Перспективы развития http.
- Интернет-приложения
- Web-приложения
- Web-сервисы
- Особенности проектирования
- Особенности пользовательского интерфейса
- Программирование интернет-приложений
- Объектно-ориентированное программирование
- Классы и объекты
- Жизненный цикл класса
- Статические члены класса
- Инкапсуляция
- Наследование
- Полиморфизм
- Интерфейсы
- Событийно-ориентированное программирование
- Совместная работа над проектом
- Технологии создания web-клиентов
- Dom (Document Object Model)
- Каскадные таблицы стилей
- JavaScript
- Обфускация и динамическое получение скриптов
- Java Applets
- ActiveX/npapi
- Adobe Flash
- Web-серверы
- Nginx (engine X)
- Технологии, применяемые на стороне сервера
- ИнтерфейсCgi
- КонцепцияMvc
- Сервлеты
- JavaScript
- Хранение данных