8.3. Эхо-сервер UDP: функция main

8.3. Эхо-сервер UDP: функция main

Теперь мы переделаем нашу простую модель клиент-сервер из главы 5, используя UDP. Диаграмма вызовов функций в программах наших клиента и сервера UDP показана на рис. 8.1. На рис. 8.2 представлены используемые функции. В листинге 8.1[1] показана функция сервера main.

Рис. 8.2. Простая модель клиент-сервер, использующая UDP

Листинг 8.1. Эхо-сервер UDP

//udpcliserv/udpserv01.с

 1 #include "unp.h"

 2

 3 intmain(int argc, char **argv)

 4 {

 5  int sockfd;

 6  struct sockaddr_in servaddr, cliaddr;

 7  sockfd = Socket(AF_INET, SOCK_DGRAM, 0);

 8  bzero(&servaddr, sizeof(servaddr));

 9  servaddr.sin_family = AF_INET;

10  servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

11  servaddr.sin_port = htons(SERV_PORT);

12  Bind(sockfd, (SA*)&servaddr, sizeof(servaddr));

13  dg_echo(sodkfd, (SA*)&cliaddr, sizeof(cliaddr));

14 }

Создание сокета UDP, связывание с заранее известным портом при помощи функции bind

7-12 Мы создаем сокет UDP, задавая в качестве второго аргумента функции socket значение SOCK_DGRAM (сокет дейтаграмм в протоколе IPv4). Как и в примере сервера TCP, адрес IPv4 для функции bind задается как INADDR_ANY, а заранее известный номер порта сервера — это константа SERV_PORT из заголовка unp.h.

13 Затем вызывается функция dg_echo для обработки клиентского запроса сервером.

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

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

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

[service main]

Из книги Документация NetAMS автора Автор неизвестен

[service main] Напоминаем, что явно описывать этот сервис не нужно: подразумевается, что конфигурационный файл начинается с описания этого сервиса.user { oid OID | name user_name }[real–name user_human_name][email email_addr][password pass][crypted crypted_pass][permit permit_state]Команда, которая задает пользователя системы и его


main

Из книги Собираем компьютер своими руками автора Ватаманюк Александр Иванович

main show versionshow config [unsecure] [oids]show connectionsshow usersshow scheduleshow units [ syspolicy [whereset] |email | hash | name XXX |mac [whereset] | unit_type ]show processorshow dsshow alertershow monitorshow list [full] [name XXX | OID YY]show policyshow quota [oid ID | name XXX | list]show loginshow perf filename [header]show healthuser { oid OID | name user_name }[real–name user_human_name][email email_addr][password pass][crypted crypted_pass][permit permit_state]no user {


Main

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Main В данной секции представлены следующие параметры.• System Time. Отображает текущее системное время. Его можно изменить, однако, как правило, пользователи настраивают системное время с помощью средств операционной системы, а не BIOS.• System Date. Показывает системную дату,


Main

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

Main Данная секция содержит параметры, отвечающие за определение и настройку устройств хранения данных, системного таймера, безопасность BIOS и т. д.• System Date. Ответственен за системную дату, можно изменить.• System Time. Отвечает за работу системного таймера и представляет


Обобщенная функция Main

Из книги Linux программирование в примерах автора Роббинс Арнольд

Обобщенная функция Main Обозначение С-функции main с ее списком аргументов (argv[]) следует заменить макросом _tmain. В зависимости от определения символической константы _UNICODE макрос разворачивается либо до main, либо до wmain. _tmain определяется в заголовочном файле <tchar.h>, который


Функция main()

Из книги C++ для начинающих автора Липпман Стенли

Функция main() Задачей новой функции main(), которая вызывается SCM, является регистрация службы в SCM и запуск диспетчера службы (service control dispatcher). Для этого необходимо вызвать функцию StartServiceControlDispatcher, передав ей имя (имена) и точку (точки) входа одной или нескольких логических


16.14. Сервер kHTTPd — веб-сервер уровня ядра

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

16.14. Сервер kHTTPd — веб-сервер уровня ядра В операционной системе все процессы можно разделить на два типа: процессы уровня ядра и пользовательские процессы. Процесс уровня ядра запускается и работает очень быстро по сравнению с относительно неповоротливым


9.1.5.2. Возвращение из main()

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

9.1.5.2. Возвращение из main() Программа может естественно завершиться одним из двух способов: посредством использования одной из описанных далее функций или возвратившись из main(). (Третий, более радикальный способ описан далее в разделе 12.4 «Совершение самоубийства: abort()».) В


5.2. Эхо-сервер TCP: функция main

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

5.2. Эхо-сервер TCP: функция main Наши клиент и сервер TCP используют функции, показанные на рис. 4.1. Программа параллельного сервера представлена в листинге 5.1[1].Листинг 5.1. Эхо-сервер TCP (улучшенный в листинге 5.9)//tcpcliserv/tcpserv01.с 1 #include "unp.h" 2 int 3 main(int argc, char **argv) 4 { 5  int listenfd, connfd; 6  pid_t


5.3. Эхо-сервер TCP: функция str_echo

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

5.3. Эхо-сервер TCP: функция str_echo Функция str_echo, показанная в листинге 5.2, выполняет серверную обработку запроса клиента: считывание строк от клиента и отражение их обратно клиенту.Листинг 5.2. Функция str_echo: отраженные строки на сокете//lib/str_echo.c 1 #include "unp.h" 2 void 3 str_echo(int sockfd) 4 { 5 


5.4. Эхо-клиент TCP: функция main

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

5.4. Эхо-клиент TCP: функция main В листинге 5.3 показана функция main TCP-клиента.Листинг 5.3. Эхо-клиент TCP//tcpcliserv/tcpcli01.c 1 #include "unp.h" 2 int 3 main(int argc, char **argv) 4 { 5  int sockfd; 6  struct sockaddr_in servaddr; 7  if (argc != 2) 8   err_quit("usage: tcpcli <Ipaddress>"); 9  sockfd = Socket(AF_INET, SOCK_STREAM, 0);10  bzero(&servaddr. sizeof(servaddr));11  servaddr.sin_family


8.4. Эхо-сервер UDP: функция dg_echo

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

8.4. Эхо-сервер UDP: функция dg_echo В листинге 8.2 показана функция dg_echo.Листинг 8.2. Функция dg_echo: отражение строк на сокете дейтаграмм//lib/dg_echo.c 1 #include "unp.h" 2 void 3 dg_echo(int sockfd, SA *pcliaddr, socklen_t clilen) 4 { 5  int n; 6  socklen_t len; 7  char mesg[MAXLINE]; 8  for (;;) { 9   len = clilen;10   n = Recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);11  


8.5. Эхо-клиент UDP: функция main

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

8.5. Эхо-клиент UDP: функция main Функция main клиента UDP показана в листинге 8.3.Листинг 8.3. Эхо-клиент UDP//udpcliserv/udpcli01.c 1 #include "unp.h" 2 int 3 main(int argc, char **argv) 4 { 5  int sockfd; 6  struct sockaddr_in servaddr; 7  if (argc != 2) 8   err_quit("usage: udpcli <Ipaddress>"); 9  bzero(&servaddr, sizeof(servaddr));10  servaddr.sin_family = AF_INET;11  servaddr.sin_port =


10.2. Потоковый эхо-сервер SCTP типа «один-ко-многим»: функция main

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

10.2. Потоковый эхо-сервер SCTP типа «один-ко-многим»: функция main Наши клиент и сервер SCTP вызывают функции в последовательности, представленной на рис. 9.2. Код последовательного сервера представлен в листинге 10.1[1].Листинг 10.1. Потоковый эхо-сервер SCTP//sctp/sctpserv01.c 1 #include "unp.h" 2 int 3