Аллен Питер В.
Шрифт:
После создания сокета и инициализации структуры sin, нужно связать наш сокет с адресом и портом сервера:
Оператор
Как и любой нормальный сервер, мы должны работать в бесконечном цикле, постоянно обрабатывая запросы клиентов. В бесконечном цикле мы:
1. получаем размер структуры client
2. создаем сокет sock2, через который будем обмениваться данными с клиентом. Если в очереди listen нет клиентов, мы переходим в состояние ожидания
3. как только подключится клиент, мы отправим ему сообщение MSG_TO_SEND
4. увеличиваем счетчик клиентов
5. получаем размер прочитанных данных, сами данные записываются в буфер buffer
6. выводим прочитанные данные на стандартный вывод
7. завершаем сеанс связи
8. закрываем сокет
Конечно, любой нормальный сервер при поступлении определенных сигналов, например, SIG_HUP, должен корректно перезапуститься или вообще завершить работу. Наш сервер этого не делает — обработку сигналов, я надеюсь, вы можете добавить сами.
Теперь мы можем откомпилировать нашу программу:
Запускаем:
Программа перешла в состояние ожидания новых клиентов.
27.3.8. Программа-клиент
Программа-клиент несколько проще, чем сервер. Вот ее листинг:
Листинг 27.4. Программа-клиент
Константа MSG — это сообщение, которое будет передано серверу. Как и в случае с сервером, нам понадобятся две структуры типа sockaddr_in: