Читайте также
Клиент
Клиент, который желает послать запрос серверу, блокируется до тех пор, пока сервер не завершит обработку запроса. Затем, после завершения сервером обработки запроса, клиент разблокируется, чтобы принять «ответ».Это подразумевает обеспечение двух условий: клиент
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
6.4. Функция str_cli (продолжение)
Теперь мы можем переписать нашу функцию str_cli, представленную в разделе 5.5 (на этот раз используя функцию select), таким образом, чтобы мы получали уведомление, как только завершится процесс сервера. Проблема с предыдущей версией состояла в том,
6.7. Функция str_cli (еще раз)
В листинге 6.2 представлена наша обновленная (и корректная) функция str_cli. В этой версии используются функции select и shutdown. Первая уведомляет нас о том, когда сервер закрывает свой конец соединения, а вторая позволяет корректно обрабатывать пакетный
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 =
8.6. Эхо-клиент UDP: функция dg_cli
В листинге 8.4 показана функция dg_cli, которая выполняет большую часть работы на стороне клиента.Листинг 8.4. Функция dg_cli: цикл обработки клиента//lib/dg_cli.c 1 #include "unp.h" 2 void 3 dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen) 4 { 5 int n; 6 char sendline[MAXLINE], recvline[MAXLINE + 1]; 7
Более простая версия функции str_cli
Неблокируемая версия функции str_cli, которую мы только что показали, нетривиальна: около 135 строк кода по сравнению с 40 строками версии, использующей функцию select с блокируемым вводом-выводом (см. листинг 6.2), и 20 строками начальной версии,
Сравнение времени выполнения различных версий функции str_cli
Итак, мы продемонстрировали четыре различных версии функции str_cli. Для каждой версии мы покажем время, которое потребовалось для ее выполнения, в том числе и для версии, использующей программные потоки (см.
16.4. Неблокируемая функция connect: клиент времени и даты
В листинге 16.7 показана наша функция connect_nonb, вызывающая неблокируемую функцию connect. Мы заменяем вызов функции connect, имеющийся в листинге 1.1, следующим фрагментом кода:if (connect_nonb(sockfd, (SA*)&servaddr, sizeof(servaddr), 0) < 0)err_sys("connect
26.3. Использование потоков в функции str_cli
В качестве первого примера использования потоков мы перепишем нашу функцию str_cli. В листинге 16.6 была представлена версия этой функции, в которой использовалась функция fork. Напомним, что были также представлены и некоторые другие
DNS-клиент
Служба предназначена для получения IP-адреса удаленного компьютера при известном доменном или url-адресе этого компьютера (например, www.mail.ru). При этом процесс получения IP-адреса удаленного компьютера реализуется благодаря взаимодействию службы DNS-клиент с
Веб-клиент
Служба позволяет изменять или добавлять файлы, хранящиеся в Интернете. Если эта стандартная функция Windows вам не нужна, то службу лучше отключить.Служба Веб-клиент занимает около 800 Кбайт оперативной памяти и запускается с правами локальной службы (NT