17.5.8. Клиентские приложения TCP
17.5.8. Клиентские приложения TCP
Клиенты TCP подобны клиентам домена Unix. Как правило, сразу же после создания сокета, клиент подключается к серверу с помощью функции connect(). Единственное различие состоит в способе передачи адреса в connect(). Вместо того, чтобы использовать имя файла, большинство клиентов TCP отыскивают имя хоста через функцию getaddrinfo(), которая предоставляет информацию для connect().
Ниже приводится несложный TCP-клиент, который взаимодействует с сервером, представленным в предыдущем разделе. Он принимает один аргумент: имя хоста, на котором работает сервер, или его IP-номер (в десятичном представлении с разделительными точками). Во всем остальном программа ведет себя также как клиент сокета домена Unix, показанный ранее в этой главе.
1: /* tclient.с */
2:
3: /* Подключиться к серверу, чье имя хоста или IP-адрес переданы в качестве
4: аргумента, на порте 4321. После соединения скопировать все содержимое
5: stdin в сокет, затем завершить работу. */
6:
7: #include <arpa/inet.h>
8: #include <netdb.h>
9: #include <netinet/in.h>
10: #include <stdio.h>
11: #include <stdlib.h>
12: #include <string.h>
13: #include <sys/socket.h>
14: #include <unistd.h>
15:
16: #include "sockutil.h" /* некоторые служебные функции */
17:
18: int main(int argc, const char ** argv) {
19: struct addrinfo hints, *addr;
20: struct sockaddr_in * addrinfo;
21: int rc;
22: int sock;
23:
24: if (argc !=2) {
25: fprintf(stderr, "поддерживается только одиночный аргумент ");
26: return 1;
27: }
28:
29: memset(&hints, 0, sizeof(hints));
30:
31: hints.ai_socktype = SOCK_STREAM;
32: hints.ai_flags = AI_ADDRCONFIG;
33: if ((rc = getaddrinfo(argv[1], NULL, &hints, &addr))) {
34: fprintf(stderr, "сбой поиска имени хоста: %s ",
35: gai_strerror(rc));
36: return 1;
37: }
38:
39: /* это позволяет получить доступ к sin_family и sin_port
40: (которые расположены там же, где и sin6_family и sin6_port) */
41: addrinfo = (struct sockaddr_in *) addr->ai_addr;
42:
43: if ((sock = socket(addrInfo->sin_family, addr->ai_socktype,
44: addr->ai_protocol)) < 0)
45: die("socket");
46:
47: addrInfo->sin_port = htons(4321);
48:
49: if (connect(sock, (struct sockaddr *) addrinfo,
50: addr->ai_addrlen))
51: die("connect");
52:
53: freeaddrinfo(addr);
54:
55: copyData(0, sock);
56:
57: close(sock);
58:
59: return 0;
60: }
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Клиентские функции сокета
Клиентские функции сокета Клиентская станция, которая желает установить соединение с сервером, также должна создать сокет, вызвав функцию socket. Следующий шаг заключается в установке соединения сервером, а, кроме того, необходимо указать номер порта, адрес хоста и другую
Приложения
Приложения Приложение 1. Интересные ссылки Я не ставил задачу собрать наибольшее количество ссылок. Здесь размещены наиболее часто упоминаемые ссылки по всяким типовым разделам и парочка тех, которые мне показались интересными.Вообще-то, размещать в книге ссылки – дело
I.2 Приложения TCP/IP
I.2 Приложения TCP/IP С самого начала в TCP/IP было заложено несколько важных свойств для служб работы с приложениями:? Терминальный доступ к любому хосту? Возможность копирования файлов с одного хоста на другой? Обмен сообщениями электронной почты между любыми двумя
Приложения
Приложения Приложение 1. Инструменты для анализа системы П1.1. Программа AVZ Программа AVZ (Антивирус Зайцева) – очень полезная утилита, и не раз меня выручала еще со времен Windows XP. Тогда я использовал антивирус Касперского, который не умел работать в безопасном режиме.
Приложения
Приложения Подарки – далеко не единственное, на что можно потратить «голоса»: на самом деле огромное их количество съедают контактовские приложения и виртуальные игры, которых в сети несколько тысяч. Популярность контакт-игр колоссальная: согласно статистике, в одну
Приложения
Приложения Насколько я помню, идея социальных мини-программ впервые появилась как раз в Facebook, и лишь потом пошла по рукам других соцсетей. Мы уже знакомы с тем, как эта штука работает «ВКонтактах» – и скажу я вам, положа руку на сердце, что для нашего юзера фейсбучные
Приложения
Приложения Таблица горячих клавиш Название — Перевод — Горячие клавиши— Выделение — Add Selection — Добавить к выделению — <Shift>+ Clone Selection — Клонирование выделения — <Alt>+ Intersect Selection — Пересечение выделений — <Shift>+<Alt>+ Inverse — Инвертировать —
Кэш приложения
Кэш приложения ASP.NET предлагает еще один, более гибкий метод обработки данных уровня приложения. Вы, конечно, помните, что значения объекта HttpApplicationState остаются в памяти до тех пор, пока работает Web-приложение. Но иногда требуется, чтобы какой-то фрагмент данных приложения
Приложения.
Приложения. ПРИЛОЖЕНИЕ А. ДОПОЛНИТЕЛЬНАЯ ЛИТЕРАТУРА Если вы хотите больше узнать о языке Си и вообще о программировании, то найдете полезной следующую
Клиентские библиотеки
Клиентские библиотеки Копии клиентских библиотек устанавливаются:* для Firebird 1.0.x имя клиентской библиотеки gds32.dll; она устанавливается в системный каталог C:WINNTsystem32 для Windows, имеющей сервисы, и в C:Windows для других версий Windows;* для Firebird 1.5 и последующих версий имя клиентской
Приложения.
Приложения. Краткий путеводитель по миру PGP. Начиная с 1991 года аббревиатура PGP стала своеобразным символом. Во-первых, она обозначает определенное семейство продуктов (в основном, разработанных Филипом Зиммерманном, или под его руководством). Во-вторых, она ассоциируется
1.11. Приложения
1.11. Приложения Приложения оформляются как продолжение работы на последующих ее страницах (после списка литературы), располагаясь в порядке появления ссылок в тексте.В приложения могут выноситься формы первичных документов, как спроектированные автором, так и