Книга: Разработка приложений в среде Linux. Второе издание
17.4.3. Соединение с сервером
17.4.3. Соединение с сервером
Процесс соединения с сервером через сокет домена Unix состоит из создания сокета и присоединения к требуемому адресу через функцию connect()
. Как только сокет присоединен, он может обрабатываться как любой другой файловый дескриптор.
Следующая программа подключается с тем же самым сокетом, который использовался в примере сервера, и копирует его стандартные входные данные на сервер.
1: /* uclient.c */
2:
3: /* Подключиться к сокету ./sample-socket домена Unix, скопировать stdin
4: в сокет, после этого выйти из программы. */
5:
6: #include <sys/socket.h>
7: #include <sys/un.h>
8: #include <unistd.h>
9:
10: #include "sockutil.h" /* некоторые служебные функции */
11:
12: int main(void) {
13: struct sockaddr_un address;
14: int sock;
15: size_t addrLength;
16:
17: if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
18: die("socket");
19:
20: address.sun_family = AF_UNIX; /* сокет домена Unix */
21: strcpy(address.sun_path, "./sample-socket");
22:
23: /* Общая длина адреса, включая элемент
24: sun_family */
25: addrLength = sizeof(address.sun_family) +
26: strlen(address.sun_path);
27:
28: if (connect(sock, (struct sockaddr *) &address, addrLength))
29: die("connect");
30:
31: copyData(0, sock);
32:
33: close(sock);
34:
35: return 0;
36: }
Клиент не особенно отличается от сервера. Единственные изменения состоят в том, что последовательность функций bind()
, listen()
, accept()
заменяется одним вызовом connect()
, при этом копируется немного другой набор данных.
- 10.7.1. Перехват соединения
- 14.5.4. Перехват соединения
- 8.1. Суперсерверы inetd и xinetd
- Средства защиты rlogind
- Настройка клиента удаленной регистрации
- Подключение клиентов и серверов именованных каналов
- Комментарии по поводу клиент-серверного процессора командной строки
- Клиентские функции сокета
- 9. Лекция: Сетевые приложения на Python.
- 21.5.1 Модель сервера TCP
- 3.1. Удаленное соединение
- Присоединение ссылки к объекту