<<
>>

Пример программы UDP-клиента

Рассмотрим, наконец, простой пример программы 14—15-Ес. Эта программа является UDP-клиентом для стандартного системного сервиса echo. Стандартный сервис принимает от клиента текстовую датаграмму и, не изменяя ее, отправляет обратно.
За сервисом зарезервирован номер порта 7. Для правильного запуска программы необходимо указать символьный IP-адрес сетевого интерфейса компьютера, к сервису которого нужно обратиться, в качестве аргумента командной строки, например:

a.out 192.168.253.12 Ниже следует текст программы:

/* Простой пример UDP клиента для сервиса echo */ #include

#include

#include

#include

#include

#include

#include

#include

int main(int arge, char **argv)

{

int sockfd; /* Дескриптор сокета */ int n, len; /* Переменные для различных длин и количества символов */

char sendline[1000], reevline[1000]; /* Массивы для отсылаемой и принятой строки */ struct sockaddr_in servaddr, cliaddr; /* Структуры для адресов сервера и клиента */

/* Сначала проверяем наличие второго аргумента в командной строке.

При его отсутствии ругаемся и прекращаем работу */ if(arge ;= 2) {

printf("Usage : a.out \n"); exit( 1 ) ;

}

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

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

}

/* Заполняем структуру для адреса клиента: семейство протоколов TCP/IP, сетевой интерфейс - любой, номер порта по усмотрению операционной системы. Поскольку в структуре содержится дополнительное не нужное нам поле, которое должно быть нулевым, перед заполнением обнуляем ее всю */

bzero(kcliaddr, sizeof(cliaddr)); cliaddr.sin_family = AF_INET; cliaddr . sin__port = htons(0);

cliaddr.sin_addr.s_addr = htonl(INADDR_ANY);

/* Настраиваем адрес сокета */ if(bind(sockfd, (struct sockaddr *) &cliaddr, sizeof(cliaddr)) < 0){

perror(NULL);

close(sockfd); /* По окончании работы закрываем дескриптор сокета */ exit(1);

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

if{inet_aton(argv[1], kservaddr.sin_addr) == 0){

printf{"Invalid IP address\n"); close(sockfd); /* По окончании работы закрываем дескриптор сокета */ exit(1);

}

/* Вводим строку, которую отошлем серверу */

printf{"String => ”);

fgets{sendline, 1000, stdin);

/* Отсылаем датаграмму */

if(sendto{sockfd, sendline, strlen{sendline)+1,

0, (struct sockaddr *) kservaddr,

sizeof(servaddr)) < 0){

perror(NULL);

close(sockfd);

exit(1);

}

/* Ожидаем ответа и читаем его.

Максимальная допустимая длина датаграммы - 1000 символов, адрес отправителя нам не нужен */ if((n = recvfгош(sockfd, recvline, 1000, 0, (struct sockaddr *) NULL, NULL)) < 0){ perror(NULL); close(sockfd); exit(1) ;

}

/* Печатаем пришедший ответ и закрываем сокет */ printf("%s\n", recvline); close(sockfd); return 0;

Наберите и откомпилируйте программу. Перед запуском «узнайте у своего системного администратора», запущен ли в системе стандартный UDP-сервис echo и если нет, попросите стартовать его. Запустите программу с запросом к сервису своего компьютера, к сервисам других компьютеров. Если в качестве IP-адреса указать несуществующий адрес, адрес выключенной машины или машины, на которой не работает сервис echo, то программа бесконечно блокируется в вызове recvfrom(), ожидая ответа. Протокол UDP не является надежным протоколом. Если датаграмму доставить по назначению не удалось, то отправитель никогда об этом не узнает!

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

Еще по теме Пример программы UDP-клиента:

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