27.3.3. Установление связи с удаленным компьютером

27.3.3. Установление связи с удаленным компьютером

Устанавливать связь можно как на стороне сервера, так и на стороне клиента. На стороне клиента используется только один вызов — connect(), который «спрашивает» у сервера: «Могу ли я подключиться?», то есть передает запрос на установление соединения. На сервере используются функции:

listen() — ожидание клиента;

accept() — подтверждение запроса клиента на установление соединения.

Сервер должен постоянно прослушивать сокет — ожидать новых клиентов. Как только новый клиент посылает запрос на установление соединения, сервер может либо разрешить ему подключиться (connect), либо запретить (например, если сервер уже обслуживает другого клиента).

Функция listen()

Вызов listen() «заставляет» программу-сервер работать в режиме ожидания запроса на соединение от клиента. Прототип этой функции следующий:

#include <sys/socket.h>

extern int listen (int __fd, int __n) __THROW;

Первый параметр — это дескриптор сокета, а второй — максимальное количество запросов на установление связи (другими словами, максимальное количество клиентов).

Как и функция bind(), функция listen() в случае успеха возвращает 0. Пример вызова функции:

if (listen (sock1, 3) != 0) {

 printf("Ошибка при вызове listen(sock1, 3) ");

 exit(1);

}

Функция connect()

Используется программой-клиентом для отправки запроса на подключение к серверу. Прототип функции следующий:

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

extern int connect (int __fd, struct sockaddr_in *addr,

 socklen_t __len) __THROW;

Первый параметр — это дескриптор сокета, созданного функцией socket() и привязанного функцией bind(). Привязку сокета функцией bind() выполнять не обязательно: если сокет не был привязан до вызова connect(), привязка будет выполнена автоматически.

Второй параметр — это указатель на структуру типа sockaddr_in, содержащую информацию о сервере: его IP-адрес, номер порта, а также семейство протоколов.

Последний параметр — это размер структуры sockaddr_in в байтах. В случае успеха функция возвращает 0, а в случае ошибки —1.

Вот пример использования вызова connect:

struct sockaddr_in server;

struct hostent *h;

...

// определяем IP-адрес сервера

h = gethostbyname("server.domain.ru");

memcpy((char*)&server.sin_addr, h->h_addr, h->h_length);

// Определяем порт сервера

server.sin_port = 1234;

// Определяем семейство протоколов

server.sin_family = AF_INET;

// Вызов функции connect()

connect(sock, &server, sizeof(server));

Если вы используете режим без установления соединения (SOCK_DGRAM), вызов connect() необязателен.

Функция accept()

Если максимальное число клиентов не превышено, сервер может принять запрос клиента. Для этого используется функция accept(). Данная функция используется только при работе в режиме с установлением соединения. Прототип функции следующий:

#include <sys/socket.h>

#include <netinet/in.h>

extern int accept(int __fd, struct sockaddr_in *addr,

 socklen_t *__restrict __len) __THROW;

Первый параметр — это дескриптор сокета, второй — указатель на структуру, где можно разместить адрес клиента, причем данную структуру инициализировать не нужно. Последний параметр — размер структуры, указанной во втором параметре.

Системный вызов accept() работает так. Сначала он извлекает из очереди listen() запрос на соединение и создает новый сокет, через который будет производиться обмен данными с клиентом, например:

// получаем сокет клиента

sock2 = accept(sock1, &client, &ans_len);

// передаем клиенту информацию

write(sock2, MSG_TO_SEND, sizeof(MSG_TO_SEND));

Если вызов accept() завершился успехом, структура addr, задаваемая во втором параметре, будет содержать IP-адрес клиента.

Если очередь listen() пуста, то наш сервер будет ожидать появления нового клиента. В случае ошибки функция accept() возвращает отрицательное значение.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

2.6.3. Установление соответствия

Из книги ИНФОРМАЦИОННАЯ ТЕХНОЛОГИЯ ОЦЕНКА ПРОГРАММНОЙ ПРОДУКЦИИ ХАРАКТЕРИСТИКИ КАЧЕСТВА И РУКОВОДСТВА ПО ИХ ПРИМЕНЕНИЮ автора Автор неизвестен

0


5.3.1 Установление требований к качеству

Из книги ИНФОРМАЦИОННАЯ ТЕХНОЛОГИЯ. РУКОВОДСТВО ПО УПРАВЛЕНИЮ ДОКУМЕНТИРОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ автора Автор неизвестен

5.3.1 Установление требований к качеству Целью начальной стадии является установление требований в терминах характеристик качества и возможных комплексных показателей (подхарактеристик). Требования выражают потребности внешнего окружения для рассматриваемой


6 УСТАНОВЛЕНИЕ СТРАТЕГИИ ДОКУМЕНТИРОВАНИЯ

Из книги ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ВСТРОЕННЫХ СИСТЕМ. Общие требования к разработке и документированию автора Госстандарт России

6 УСТАНОВЛЕНИЕ СТРАТЕГИИ ДОКУМЕНТИРОВАНИЯ Стратегии документирования, подготовленные и отслеживаемые главной администрацией, обеспечивают руководства для ответственных лиц, принимающих решения на всех нижних уровнях. Стратегия обеспечивает главное направление, но


8 УСТАНОВЛЕНИЕ ПРОЦЕДУР ДОКУМЕНТИРОВАНИЯ

Из книги Системное программирование в среде Windows автора Харт Джонсон М

8 УСТАНОВЛЕНИЕ ПРОЦЕДУР ДОКУМЕНТИРОВАНИЯ Должны быть установлены процедуры для применяемых в организациях стратегий документирования.Процедуры определяют последовательность документирования: планирование; подготовка;конфигурационное управление; проверка;


Установление клиентского соединения с сервером

Из книги Бесплатные разговоры через Интернет автора Фрузоров Сергей

Установление клиентского соединения с сервером Если имеется сервер с сокетом в режиме прослушивания, клиент может соединиться с ним при помощи функции connect.  int connect(SOCKET s, LPSOCKADDR lpName, int nNameLen);  Параметрыs — сокет, созданный с использованием функции socket.lpName — указатель на


Установление соединения по запросу

Из книги Linux автора Стахнов Алексей Александрович

Установление соединения по запросу При работе на отдельной рабочей станции или компьютере необходимость использовать специальную программу установления взаимодействия или вручную запускать соответствующий сценарий практически не мешает работе. Если же


Установление соединения

Из книги Защита от хакеров корпоративных сетей автора Автор неизвестен

Установление соединения Соединение между двумя маршрутизаторами FreeS/WAN устанавливается следующим образом: на одной стороне программа ipsec запускается в режиме демона, а на другой стороне та же программа используется для инициализации соединения. Если настройка


Работа с удаленным помощником

Из книги Введение в криптографию автора Циммерманн Филипп

Работа с удаленным помощником Допустим, что вы еще не совсем опытный пользователь, и у вас то и дело возникают всякие трудности. Вы уже успели до чертиков надоесть своему другу, которому приходится бегать к вам через весь город и делать за вас элементарные вещи. И вот


Глава 28 Доступ к удаленным компьютерам

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Глава 28 Доступ к удаленным компьютерам Мы уже неоднократно упоминали о том, что любая UNIX-подобная операционная система может удаленно администрироваться и конфигурироваться. Говорили мы и о возможности удаленной работы на компьютере под управлением Linux, а также и об


Установление идентичности в компьютерных сетях

Из книги Установка, настройка и восстановление Windows 7 на 100% автора Ватаманюк Александр Иванович

Установление идентичности в компьютерных сетях В отличие от привыкших доверять друг другу людей, проблема установления идентичности в компьютерных сетях основана не на случайных признаках (например, как выглядит человек, каковы его характерные черты и т. д.). Она


Установление доверия

Из книги автора

Установление доверия Вы сами удостоверяете сертификаты. Но вы также доверяете людям. Поэтому вы можете доверить людям и право удостоверять сертификаты. Как правило, если только владелец сам не вручил вам копию ключа, вы должны положиться на чьё-то чужое мнение о его


2.6. Установление и завершение соединения TCP

Из книги автора

2.6. Установление и завершение соединения TCP Чтобы облегчить понимание функций connect, accept и close и чтобы нам было легче отлаживать приложения TCP с помощью программы netstat, мы должны понимать, как устанавливаются и завершаются соединения TCP. Мы также должны понимать диаграмму


2.8. Установление и завершение ассоциации SCRIPT

Из книги автора

2.8. Установление и завершение ассоциации SCRIPT Протокол SCRIPT ориентирован на установление соединения, подобно TCP, поэтому он также имеет собственные процедуры рукопожатия и завершения. Однако рукопожатия SCRIPT отличаются от рукопожатий TCP, поэтому мы описываем их


Подключение к удаленным рабочим столам и приложениям RemoteApp

Из книги автора

Подключение к удаленным рабочим столам и приложениям RemoteApp С помощью этого механизма вы можете влиять на используемые удаленные подключения, а также создавать новые подключения. Подобный подход очень удобен тем, что позволяет управлять удаленным рабочим местом или