21.10 Программа сервера UDP

21.10 Программа сервера UDP

Показанная ниже программа создает socket для UDP, связывает вызов с портом, а затем получает и распечатывает сообщения, которые посылаются на этот порт:

/* udpserv.c

 * Для запуска программы ввести "udpserv".

 *

 * Сначала включить стандартные заголовочные файлы. */

#include <sys/types.h>

#include <sys/socket.h>

#include <stdio.h>

#include <netinet/in.h>

#include <netdb.h>

#include <errno.h>

#define BUFLEN 81

main() {

 int sockMain, addrLength, msgLength;

 struct sockaddr_in servAddr, clientAddr;

 char buf[BUFLEN];

 /* 1. Создать socket для UDP. */

 if ((sockMain = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {

  perror("Сервер не может открыть socket для UDP.");

  exit(1);

 }

 /* 2. Ввести информацию в структуру данных, используемую для хранения локальных

  * IP-адресов и порта. Возложить на bind получение свободных портов. */

 bzero((char *)&servAddr, sizeof(servAddr));

 servAddr.sin_family = AF_INET;

 servAddr.sin_addr.s_addr = htonl(INADDR_ANY);

 servAddr.sin_port = 0;

 /* 3. Вызвать bind, которая запишет номер используемого порта

  * в TCB. */

 if (bind(sockMain, &servAddr, sizeof(servAddr))) {

  perror("Вызов bind от сервера неудачен.");

  exit(1);

 }

 /* 4. Извлекаем номер порта и используем функцию

  * getsockname() для копирования порта в servAddr. */

 addrLength = sizeof(servAddr);

 if ( getsockname(sockMain, &servAddr, &addrLength)) {

  perror(Вызов getsockname неудачен.");

  exit(1);

 }

 printf("SERVER: Номер порта is %d ", ntohs(servAddr.sin_port));

 /* 5. Бесконечный цикл ожидания сообщений от клиентов. */

 for (;;) {

  addrLength = sizeof(clientAddr);

  bzero(buf, BUFLEN);

  if ((msgLength = recvfrom(sockMain, buf, BUFLEN, 0, &clientAddr, &addrLength)) < 0) {

   perror("Плохой socket клиента.");

   exit(1);

  }

  /* 6. Распечатать клиентские IP-адрес и порт вместе с сообщением. */

  printf("SERVER: IP-адрес клиента: %s ",

   inet_ntoa(clientAddr.sin_addr));

  printf("SERVER: Порт клиента: %d ",

   ntohs(clientAddr.sin_port));

  printf("SERVER: Длина сообщения %d ", msgLength);

  printf("SERVER: Сообщение: %s ", buf);

 }

}

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Программа Nero Express Лучшая программа для записи дисков

Из книги Самоучитель работы на компьютере автора Колисниченко Денис Николаевич

Программа Nero Express Лучшая программа для записи дисков Записывать диски средствами Windows неинтересно. Во-первых, скучно, а во-вторых, вам недоступны какие-либо настройки записи, вы даже не можете указать скорость, не говоря уже о выборе формата диска, методе записи. Вот


11.6.9. Модель CLI-сервера

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

11.6.9. Модель CLI-сервера В мире Unix обычной является практика, когда серверные процессы вызываются управляющими программами[105], такими как inetd(8), т.е. сервер может получать команды через стандартный ввод и отправлять ответы на стандартный вывод. Управляющая программа затем


21.5.1 Модель сервера TCP

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

21.5.1 Модель сервера TCP Типичный сценарий для взаимодействия с сервером TCP предполагает наличие главного процесса, который большую часть времени отслеживает запросы от клиентов. Когда клиент соединяется с сервером, сервер обычно создает новый дочерний процесс, который


Инсталляция сервера VNC

Из книги Сетевые средства Linux автора Смит Родерик В.

Инсталляция сервера VNC Программу, реализующую сервер VNC, можно получить с Web-узла VNC http://www.uk.research.att.com/vnc/. Сервер и клиент VNC поставляются со многими версиями Linux (VNC распространяется в исходных кодах). Иногда и клиент, и сервер входят в состав одного пакета (такой пакет обычно


Запуск сервера VNC

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич


Настройка сервера VNC

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Настройка сервера VNC VNC представляет собой удобный инструмент удаленного доступа, но при использовании могут возникать проблемы. В частности, многие пользователи сообщают об ошибках, возникающих при совместной работе редактора NEdit (http://www.nedit.org) и VNC. В моей системе NEdit не


Использование FTP-сервера

Из книги Linux глазами хакера автора Флёнов Михаил Евгеньевич

Использование FTP-сервера FTP-сервер имеет некоторое сходство с Web-сервером, рассмотренным в главе 20, а также с серверами Samba и NFS, предназначенными для разделения файлов (о них шла речь в главах 7 и 8). Все эти серверы позволяют передавать файлы с одного компьютера на другой и в


Запуск FTP-сервера

Из книги автора

Запуск FTP-сервера Варианты запуска серверов в системе Linux рассматривались в главе 4. Если пакет, реализующий FTP-сервер, поставляется в составе системы, для обеспечения запуска сервера вам потребуется приложить лишь минимальные усилия. Не исключено также, что запуск


12.1.2. Настройка сервера NFS

Из книги автора

12.1.2. Настройка сервера NFS Сервер NFS экспортирует файловые системы, то есть делает их доступными для использования с другого компьютера. Обслуживанием экспорта занимаются следующие демоны:? rpc.mountd, обрабатывающий запрос на монтирование;? rpc.nfsd, обеспечивающий доступ к


Тестирование сервера

Из книги автора

Тестирование сервера Обычно первое, что вы захотите сделать после завершения инсталляции, - это проверить обращение к серверу. Это даст вам реальную возможность убедиться, что ваша клиентская машина может видеть хост в вашей сети. Предположим, что IP-адрес вашего сервера в


Роль сервера

Из книги автора

Роль сервера Работа сервера включает:* управление хранением данных базы данных и выделение дискового пространства;* управление всеми транзакциями, запущенными клиентами, гарантирование, что каждая получит и сохранит непротиворечивый образ постоянно хранимых данных,


Безопасность сервера

Из книги автора

Безопасность сервера Для управления доступом пользователей к серверу Firebird использует базу данных безопасности security.fdb (isc4.gdb в версии 1.0.x). Во время инсталляции эта база данных содержит одного пользователя - SYSDBA.* В инсталляции Windows пароль пользователя SYSDBA masterkey.


10.1.2. Сообщения сервера

Из книги автора

10.1.2. Сообщения сервера В ответ на полученные команды сервер возвращает нам сообщения, по которым можно оценить результат работы. Уведомления состоят из числового трехзначного кода и необязательной текстовой части. Если для ответа требуется несколько строк, то в первой


10.2. Конфигурирование wu-ftp-сервера

Из книги автора

10.2. Конфигурирование wu-ftp-сервера По моим наблюдениям самым распространенным FTP-сервером является wu-ftp (Washington University FTP Server), потому что он поставляется вместе с основными дистрибутивами Linux, в том числе Red Hat и его клонами. Если у вас именно такой дистрибутив, то с установкой


12.5.3. Журнал FTP-сервера

Из книги автора

12.5.3. Журнал FTP-сервера Войдя в систему, взломщики нередко закачивают на сервер собственные программы для повышения своих прав или для открытия потайных дверей. Для закачки можно использовать FTP-протокол. Кто подключался к серверу можно узнать из файла /var/log/secure. А вот что


12.5.5. Журнал Web-сервера

Из книги автора

12.5.5. Журнал Web-сервера Сервер Apache хранит свои журналы в файлах access.log и error.log, которые расположены в директории /var/log/httpd. Эти журналы позволяют узнать об активности и доступе пользователей.С другой стороны, журналы текстовые и легко читаемые. Любой хакер может просмотреть