Студопедия — Internet-Domain сокеты
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Internet-Domain сокеты






Cокеты UNIX-domain использоваться только для взаимодействия двух процессов только на одном компьютере. Сокеты Internet, используются для соединения нескольких процессов на различных машинах, подключенных к сети.

 

Для соединения процессов через Интернет сокеты используют пространство имен Интернет указываемое с помощью PF_INET. Большинство протоколов являются TCP/IP. Интернет протокол (IP), протокол нижнего уровня, отправляет пакеты через Интернет, разбивая на меньшие пакеты, в случае необходимости. Он гарантирует только доставку "лучшего усилия", так что пакеты могут быть потеряны или переупорядочены во время транспортировки. Каждый компьютер имеет IP адрес. Протокол управления передачей (TCP), который следует за IP протоколом, обеспечивает надежное подключение. Это позволяет установить между компьютерами соединение, наподобие телефонного и гарантирует доставку данных в правильном порядке.

 

Интернет адрес сокета состоит из двух частей: номера компьютера и номера порта. Эта информация хранится в переменной структуры sockaddr_in. Для идентификации того, что это адрес Интернет пространства имен, необходимо установить поле sin_family в AF_INET. В поле Sin_addr хранится Интернет адрес компьютера, как 32-разрядное целое число IP. Каждому сокету на одном компьютере присваивается номер порта. Поскольку различные машины сохраняют многобайтовые значения в различном порядке байта, используют htons, чтобы преобразовать число порта к сетевому порядку байтов.

 

Команда gethostbyname преобразовывает удобочитаемые имена хоста, числа со стандартной точечной нотацией (типа 10.0.0.1) или DNS имена (такие как www.codesourcery.com) в 32-разрядные IP адреса. В качестве результата возвращается указатель на структуру struct hostent; в поле h_addr хранится IP адрес главного компьютера.

 

Листинг 13.3 иллюстрирует использование Internet-domain сокетов. Программа получает домашнюю страницу от Web сервера, имя хоста которого определено в командной строке.

 

Листинг 13.3 (socket-inet.c)

#include <stdlib.h>

#include <stdio.h>

#include <netinet/in.h>

#include <netdb.h>

#include <sys/socket.h>

#include <unistd.h>

#include <string.h>

/* Печать содержимого домашней страницы.

* В качестве результата передать флаг успешного завершения процесса.*/

void get_home_page (int socket_fd)

{

char buffer[10000];

ssize_t number_characters_read;

/* Передать команду HTTP GET для домашней страницы */

sprintf (buffer, "GET /\n");

write (socket_fd, buffer, strlen (buffer));

/* Читать данные из сокета. Не все данные могут быть возвращены одновременно,

* продолжать попытку до завершения процесса */

while (1) {

number_characters_read = read (socket_fd, buffer, 10000);

if (number_characters_read == 0)

return;

/* Записать данные в стандартный вывод */

fwrite (buffer, sizeof (char), number_characters_read, stdout);

}

}

int main (int argc, char* const argv[])

{

int socket_fd;

struct sockaddr_in name;

struct hostent* hostinfo;

/* Создать сокет */

socket_fd = socket (PF_INET, SOCK_STREAM, 0);

/* Сохранить адрес сервера в адрессе сокета */

name.sin_family = AF_INET;

/* Преобразовать строку в число */

hostinfo = gethostbyname (argv[1]);

if (hostinfo == NULL)

return 1;

else

name.sin_addr = *((struct in_addr *) hostinfo->h_addr);

/* Web сервер использует 80 порт */

name.sin_port = htons (80);

/* Установить соединение с Web сервером */

if (connect (socket_fd, &name, sizeof (struct sockaddr_in)) == -1) {

perror ("connect");

return 1;

}

/* Получить домашнюю страницу */

get_home_page (socket_fd);

return 0;

}

 

Имя хоста Web сервера задается в командно строке (без "http: //"). Команда gethostbyname преобразовывает имя хоста в числовой IP адрес и затем подключает поток (TCP) сокета к порту 80 на главном компьютере. Серверы используют Гипертекстовый Транспортный Протокол (HTTP), поэтому передается команда HTTP GET, сервер в качестве ответа передает текст домашней страницы.

 

Для отображения страницы www.codesourcery.com, необходимо задать следующую команду

%./socket-inet www.codesourcery.com

<html>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

...







Дата добавления: 2015-08-27; просмотров: 388. Нарушение авторских прав; Мы поможем в написании вашей работы!



Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Классификация потерь населения в очагах поражения в военное время Ядерное, химическое и бактериологическое (биологическое) оружие является оружием массового поражения...

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

Йодометрия. Характеристика метода Метод йодометрии основан на ОВ-реакциях, связанных с превращением I2 в ионы I- и обратно...

Типовые ситуационные задачи. Задача 1. Больной К., 38 лет, шахтер по профессии, во время планового медицинского осмотра предъявил жалобы на появление одышки при значительной физической   Задача 1. Больной К., 38 лет, шахтер по профессии, во время планового медицинского осмотра предъявил жалобы на появление одышки при значительной физической нагрузке. Из медицинской книжки установлено, что он страдает врожденным пороком сердца....

Типовые ситуационные задачи. Задача 1.У больного А., 20 лет, с детства отмечается повышенное АД, уровень которого в настоящее время составляет 180-200/110-120 мм рт Задача 1.У больного А., 20 лет, с детства отмечается повышенное АД, уровень которого в настоящее время составляет 180-200/110-120 мм рт. ст. Влияние психоэмоциональных факторов отсутствует. Колебаний АД практически нет. Головной боли нет. Нормализовать...

Эндоскопическая диагностика язвенной болезни желудка, гастрита, опухоли Хронический гастрит - понятие клинико-анатомическое, характеризующееся определенными патоморфологическими изменениями слизистой оболочки желудка - неспецифическим воспалительным процессом...

Studopedia.info - Студопедия - 2014-2024 год . (0.009 сек.) русская версия | украинская версия