Пример программы UDP-клиента
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 не является надежным протоколом. Если датаграмму доставить по назначению не удалось, то отправитель никогда об этом не узнает!
Еще по теме Пример программы UDP-клиента:
- Примеры жестокости по отношению к другим (эти примеры более всего относятся к семейной жизни):
- Программа Да и программа Нет
- Свободное воспроизведение программ для ЭВМ и баз данных. Декомпилирование программ для ЭВМ
- 4. 2. ОЦЕНКА ПРОБЛЕМ КЛИЕНТОВ
- Слушание клиента
- 6.3. Клиенты и консультанты
- Безусловное уважение клиента
- 5. 7. ОСОБЕННОСТИ КОНСУЛЬТИРОВАНИЯ ПЛАЧУЩИХ КЛИЕНТОВ
- 5. 5. КОНСУЛЬТИРОВАНИЕ КЛИЕНТОВ, ПРЕДЪЯВЛЯЮЩИХ ЗАВЫШЕННЫЕ ТРЕБОВАНИЯ
- Будьте добросовестны по отношению к клиентам и к себе
- КЛИЕНТ
- 4. 1. ПЕРВАЯ ВСТРЕЧА С КЛИЕНТОМ
- 5. 14. КОНСУЛЬТИРОВАНИЕ КЛИЕНТОВ С ПСИХОСОМАТИЧЕСКИМИ РАССТРОЙСТВАМИ
- Статья 1081. Ответственность клиента перед фактором
- 5. 1. КОНСУЛЬТИРОВАНИЕ ТРЕВОЖНЫХ КЛИЕНТОВ
- 5. 3. КОНСУЛЬТИРОВАНИЕ ВРАЖДЕБНО НАСТРОЕННЫХ И АГРЕССИВНЫХ КЛИЕНТОВ
- 5. 15. КОНСУЛЬТИРОВАНИЕ КЛИЕНТОВ С ДЕПРЕССИЕЙ И СУИЦИДНЫМИ НАМЕРЕНИЯМИ