Книга: Разработка приложений в среде 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(), при этом копируется немного другой набор данных.

Оглавление книги


Генерация: 4.289. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз