21.11 Клиентская программа UDP

21.11 Клиентская программа UDP

Клиент соединяется с сервером, посылает одно сообщение и закрывает соединение. При запуске программы конечный пользователь должен ввести имя хоста, порт сервера и отправляемое на сервер сообщение. Например:

udpclient plum.cs.yale.edu 2315 "Это сообщение."

/* udpclient.с

 * Перед запуском клиента следует запустить сервер.

 * Далее нужно получить порт сервера.

 * Для запуска клиента ввести:

 * udpclient имя_хоста порт сообщение */

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <netdb.h>

#include <stdio.h>

#include <errno.h>

main(argc, argv)

 int argc;

 char *argv[]; /* Это вводимые пользователем аргументы. */

               /* argv[0] - имя программы. argv[1] указывает на имя хоста. */

               /* argv[2] ссылается на порт, */

               /* а argv [3] ссылается на текстовое сообщение. */

{

 int sock;

 struct sockaddr_in, servAddr, clientAddr;

 struct hostent *hp, *gethostbyname();

 /* Должно быть четыре аргумента. */

 if (argc < 4) {

  printf ("ВВЕСТИ udpclient имя_хоста порт сообщение ");

  exit(1);

 }

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

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

  perror("He получен socket ");

  exit(1);

 }

 /* 2. Занести адрес и порт сервера в servAddr.

  * Сначала заполнить адресную структуру нулями.

  * Использовать функцию gethostbyname для получения имени хоста

  * и его IP-адреса. Затем скопировать IP-адрес

  * в servAddr функцией bcopy.

  * Наконец занести номер порта из argv[2]. */

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

 servAddr.sin_family = AF_INET;

 hp = gethostbyname(argv[1]);

 bcopy(hp->h_addr, &servAddr.sin_addr, hp->h_length);

 servAddr.sin_port = htons(atoi(argv[2]));

 /* 3. Вызвать bind для получения порта UDP. Система

  * назначает свободный порт. */

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

 clientAddr.sin_family = AF_INET;

 clientAddr.sin_addr.s_addr = htonl(INADDR_ANY);

 clientAddr.sin_port = 0;

 if (bind(sock, &clientAddr, sizeof(clientAddr)) < 0) {

  perror("Клиент не получил порт. ");

  exit(1);

 }

 /* 4. Клиент анонсирует свою готовность к приему сообщений.

  * Он посылает сообщение и распечатывает последнюю строку. */

 printf ("CLIENT: Готов к пересылке ");

 if (sendto(sock, argv[3], strlen(argv[3]), 0, &servAddr, sizeof(servAddr)) < 0) {

  perror "Проблема с sendto. ");

  exit(1);

 }

 printf ("CLIENT: Пересылка закончена. Счастливо. ");

 /* Закрытие socket */

 close(sock);

}

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

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

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

Глава 1. Что такое клиентская оптимизация?

Из книги Разгони свой сайт автора Мациевский Николай

Глава 1. Что такое клиентская оптимизация? 1.1. Цели и задачи оптимизации Каждая веб-страница состоит из основного HTML-файла и набора внешних ресурсов. Говоря о размере страницы (или сайта), очень часто имеют в виду размер именно первого файла, что, естественно,


1.4. Клиентская и серверная оптимизация: сходство и различия

Из книги Linux для пользователя автора Костромин Виктор Алексеевич

1.4. Клиентская и серверная оптимизация: сходство и различия Клиентская оптимизация оперирует двумя основными принципами: меньше данных и меньше соединений. Но именно эти принципы помогают уменьшить нагрузку на сам сервер. Давайте посмотрим, как это происходит и как


4.7.1. Программа tar

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

4.7.1. Программа tar У читателя, привыкшего к архиваторам типа arj, которые собирают файлы в единый архив и сразу "сжимают" их, может возникнуть вопрос "А зачем использовать две программы?” Все дело в том, что tar расшифровывается как Tape ARchiver, он не сжимает данные, а лишь объединяет


10.2. Программа rpm

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

10.2. Программа rpm Название этой программы (или команды) является аббревиатурой от Redhat Package Manager. Такая расшифровка дается в большинстве книг и руководств по Linux и кажется мне более правильной и логичной, хотя в главе 6 "The Official Red Hat Linux Reference Guide" говорится: "The RPM Package Manager (RPM), is an open


13.3.2 Программа ftp

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

13.3.2 Программа ftp Программа ftp - это пользовательский интерфейс к стандартному протоколу передачи файлов по Интернету - File Transfer Protocol. Программа позволяет передавать файлы на удаленный компьютер и получать файлы с удаленного компьютера. Однако, введя команду ftp, вы


16.2. Клиентская часть

Из книги Программирование на языке Пролог для искусственного интеллекта автора Братко Иван

16.2. Клиентская часть Удобной программой для просмотра структуры базы данных является mysqlshow. Введите следующую команду: mysqlshow –p mysqlВ ответ вы увидите список таблиц, которые находятся в базе данных mysql.Database: mysql+--------+I Tables I+--------+I db     II host   II user   I+--------+Программа mysqlshow может


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

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

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


21.7 Клиентская программа TCP

Из книги Ubuntu 10. Краткое руководство пользователя автора Колисниченко Д. Н.

21.7 Клиентская программа TCP Клиент соединяется с сервером, посылает одно сообщение, и далее работа программы завершается (фрагменты программы рассматриваются в следующем разделе). Для запуска программы конечный пользователь должен ввести имя хоста сервера, номер порта и


4.5.1. Программа 1

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

4.5.1. Программа 1 Вначале нужно выбрать способ представления позиции на доске. Один из наиболее естественных способов — представить позицию в виде списка из восьми элементов, каждый из которых соответствует одному из ферзей. Каждый такой элемент будет описывать то поле


4.5.2. Программа 2

Из книги Язык Си - руководство для начинающих автора Прата Стивен

4.5.2. Программа 2 В соответствии с принятым в программе 1 представлением доски каждое решение имело вид[1/Y1, 2/Y2, 3/Y3, ..., 8/Y8]так как ферзи расставлялись попросту в последовательных вертикалях. Никакая информация не была бы потеряна, если бы X-координаты были пропущены. Поэтому


17.2. Клиентская часть MySQL

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

17.2. Клиентская часть MySQL Удобной программой для просмотра структуры базы данных является mysqlshow. Введите следующую команду:$ mysqlshow -p mysqlВ ответ вы увидите список таблиц, которые находятся в базе данных mysql.Программа mysqlshow может вызываться с дополнительными ключами,


9.3. Программа apt-get

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

9.3. Программа apt-get Предположим, у вас есть пакет package.deb. При его установке обнаружилось, что он требует наличия пакета lib.deb, который у вас не установлен. Что ж, вы находите в Интернете отсутствующий пакет, устанавливаете его способом, описанным в разд. 9.2 (то есть применяя


20.3. Программа bum

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

20.3. Программа bum Ранее в Ubuntu имелась программа Службы (в программной группе Система | Администрирование), позволяющая включать/отключать системные сервисы. В современных версиях Ubuntu такой программы нет. Зато можно установить программу Boot-Up Manager, которая даже лучше, чем


Клиентская библиотека Firebird

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

Клиентская библиотека Firebird Клиентская библиотека Firebird поставляется во множестве вариантов, которые обрабатывают идентичные API-функции приложений для версии сервера, к которому они обращаются. В табл. 7.1 в конце этой главы представлены имена и размещение этих библиотек.В


Программа

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

Программа      Ниже приводится короткая программа, позволяющая узнавать номер кода символа даже в том случае, если на вашей машине не используется код ASCII. main( )   /* определяет номер кода символа */{   char ch;   printf(" Введите, пожалуйста, символ . ");   scanf(" %c", &ch);   /* ввод