connect(sock, &server, sizeof(server));
ans_len = recv(sock, buffer, BUF_SIZE, 0);
write(1, buffer, ans_len);
send(sock, MSG, sizeof(MSG), 0);
close(sock);
exit(0);
}
Константа MSG — это сообщение, которое будет передано серверу. Как и в случае с сервером, нам понадобятся две структуры типа sockaddr_in:
struct hostent *h;
struct sockaddr_in client, server;
Структура типа hostent нам нужна для получения адреса сервера.
Создаем сокет, заполняем информацию о клиенте и связываем сокет:
sock = socket(AF_INET, SOCK_STREAM, 0);
memset((char *)&client, '\0' , sizeof(client));
client.sin_family = AF_INET;
client.sin_addr.s_addr = INADDR_ANY;
client.sin_port = CLIENT_PORT;
bind(sock, (struct sockaddr *)&client, sizeof(client));
Перед подключением к серверу нужно определить его IP-адрес:
h = gethostbyname(SERVER_HOST);
Подключаемся к серверу:
server.sin_family = AF_INET; // набор протоколов
memcpy((char *)&server.sin_addr, h->h_addr, h->h_length);
// задаем адрес сервера
server.sin_port = SERVER_PORT; // указываем порт сервера
connect(sock, &server, sizeof(server));
После подключения к серверу принимаем его запрос, выводим на стандартный вывод, отправляем серверу свое сообщение и закрываем сокет:
ans_len = recv(sock, buffer, BUF_SIZE, 0);
write(1, buffer, ans_len);
send(sock, MSG, sizeof(MSG), 0);
close(sock);
27.3.9. Установка опций сокета
Поскольку мы используем набор протоколов AF_INET, то в этом пункте будем рассматривать только те опции сокетов, которые относятся к этому набору. Для работы с опциями сокета используются две функции:
♦ getsockopt() — получение опций сокета;
♦ setsockopt() — установка опций сокета.
Прототипы этих функций выглядят так:
#include
int getsockopt(int sd, int level, int option_name,
void *restrict option_value, socklen_t *restrict option_len);
int setsockopt(int sd, int level, int option_name,
const void *option_value, socklen_t option_len);
Первый параметр, sd, — это дескриптор сокета. Второй параметр — уровень доступа (существует только один уровень — SOL_SOCKET). Следующий параметр, option_name, — это название опции, значение которой вы хотите изменить (см. таблицу 27.10). Последние два параметра — это значение опции и его размер.
Наиболее часто используемые опции сокетов Таблица 27.10
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии