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. Клиентская и серверная оптимизация: сходство и различия

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

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


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

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

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

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

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 может


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

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

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


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

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

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


Программа

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

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


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

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

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


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, которая даже лучше, чем


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

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

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


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

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

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


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

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

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