Пример программы UDP-сервера

Поскольку UDP-сервер использует те же самые системные вызовы, что и UDP-клиент, мы можем сразу приступить к рассмотрению примера UDP-сервера (программа 15—16-2.с) для сервиса echo.

/* Простой пример UDP-сервера для сервиса echo */ ttinclude ttinclude ttinclude

#include

#include

#include

#include ttinclude int main()

int sockfd; /* Дескриптор сокета */ int clilen, n; /* Переменные для различных длин и количества символов */ char line[1000]; /* Массив для принятой и

отсылаемой строки */

struct sockaddr_in servaddr, cliaddr; /* Структуры для адресов сервера и клиента */

/* Заполняем структуру для адреса сервера: семейство протоколов TCP/IP, сетевой интерфейс - любой, номер порта 51000. Поскольку в структуре содержится дополнительное не нужное нам поле, которое должно быть нулевым, перед заполнением обнуляем ее всю */ bzero(&servaddr, s izeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(51000);

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

/* Создаем UDP-сокет */

if((sockfd = socket(PF_INET, SOCK_DGRAM, 0)) < 0){ perror(NULL); /* Печатаем сообщение об ошибке */ exit(1) ;

}

/* Настраиваем адрес сокета */

if(bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0){ ;

perror(NULL); close(sockfd); exit(1) ;

)

while(1) {

/* Основной цикл обслуживания*/

/* В переменную clilen заносим максимальную длину для ожидаемого адреса клиента */ clilen = sizeof(cliaddr);

/* Ожидаем прихода запроса от клиента и читаем его. Максимальная допустимая длина датаграммы - 999 символов, адрес отправителя помещаем в структуру cliaddr, его реальная длина будет занесена в переменную clilen */ if((n = recvfrom(sockfd, line, 999, 0,

(struct sockaddr *) &cliaddr, &clilen)) < 0){

perror(NULL); close(sockfd); exit(1);

)

/* Печатаем принятый текст на экране */ printf("%s\n", line);

/* Принятый текст отправляем обратно по адресу отправителя */

if ( sendto(sockfd, line, strlen(line) , 0,

(struct sockaddr *) &cliaddr, clilen) < 0){ perror(NULL); close(sockfd); exit (1) ;

) /* Уходим ожидать новую датаграмму*/

)

return 0;

Наберите и откомпилируйте программу. Запустите ее на выполнение. Модифицируйте текст программы ЕЮР-клиента (программа 14—15-1.с), заменив номер порта с 7 на 51000. Запустите клиента с другого виртуального терминала или с другого компьютера и убедитесь, что клиент и сервер взаимодействуют корректно.

<< | >>
Источник: В.Е. Карпов К.А. Коньков. Основы операционных систем. 2005

Еще по теме Пример программы UDP-сервера:

  1. Богомазова Г.Н.. Установка и обслуживание программного обеспечения персональных компьютеров, серверов, периферийных устройств и оборудования, 2015
  2. Примеры жестокости по отношению к другим (эти примеры более всего относятся к семейной жизни):
  3. Программа Да и программа Нет
  4. Свободное воспроизведение программ для ЭВМ и баз данных. Декомпилирование программ для ЭВМ
  5. Г л а в а 9 О ПРОГРАММАХ
  6. Музыкальные концертные программы
  7. ИЗНАЧАЛЬНО КОРОТКАЯ ПРОГРАММА
  8. Программа телевидения
  9. ПРОЕКТНЫЙ И ИСПОЛНИТЕЛЬНЫЙ УРОВНИ ПРОГРАММ
  10. О программе Астропроцессор ZET
  11. Установка программы Астропроцессор ZET
  12. Г л ав а 30 ПРОГРАММЫ СТАРОСТИ. ДОЛГОЖИТЕЛИ
  13. Глава 3. ПРОГРАММА СОЦИОЛОГИЧЕСКОГО ИССЛЕДОВАНИЯ
  14. Первый запуск программы
  15. Глава 1. Программа и анкета
  16. Г л а в а 6 ПРОГРАММЫ НЕВОЗМОЖНОСТИ
  17. Г л а в а 28 ПРОГРАММЫ ДРУГИХ ЛЮДЕЙ
  18. Основная программа духовного очищения