UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
19-24forkstr_echo5.3. Эхо-сервер TCP: функция str_echo
Функция
str_echoЛистинг 5.2. Функция str_echo: отраженные строки на сокете
//lib/str_echo.c 1 #include "unp.h" 2 void 3 str_echo(int sockfd) 4 { 5 ssize_t n; 6 char buf[MAXLINE]; 7 for (;;) { 8 if ((n = read(sockfd, buf, MAXLINE)) > 0) 9 return; /* соединение закрыто с другого конца */10 Writen(sockfd, line, n);11 }12 }7-11readwritenreadstr_echo5.4. Эхо-клиент TCP: функция main
В листинге 5.3 показана функция
mainЛистинг 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 = AF_INET;12 servaddr.sin_port = htons(SERV_PORT);13 Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);14 Connect(sockfd, (SA*)&servaddr, sizeof(servaddr));15 str_cli(stdin, sockfd); /* эта функция выполняет все необходимые действия со стороны клиента */16 exit(0);17 }9-13SERV_PORTunp.h14-15connectstr_cli5.5. Эхо-клиент TCP: функция str_cli
Эта функция, показанная в листинге 5.4, обеспечивает отправку запроса клиента и прием ответа сервера в цикле. Функция считывает строку текста из стандартного потока ввода, отправляет ее серверу и считывает отраженный ответ сервера, после чего помещает отраженную строку в стандартный поток вывода.
Листинг 5.4. Функция str_cli: цикл формирования запроса клиента
//lib/str_cli.c 1 #include "unp.h" 2 void 3 str_cli(FILE *fp, int sockfd) 4 { 5 char sendline[MAXLINE], recvline[MAXLINE]; 6 while (Fgets(sendline, MAXLINE, fp) != NULL) { 7 Writen(sockfd,. sendline, strlen(sendline)); 8 if (Readline(sockfd, recvline, MAXLINE) == 0) 9 err_quit("str_cli: server terminated prematurely");10 Fputs(recvline, stdout);11 }12 }6-7fgetswriten8-10readlinefputs11-12fgetsFgetsFgets
