Студопедия Главная Случайная страница Обратная связь

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

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; просмотров: 417. Нарушение авторских прав; Мы поможем в написании вашей работы!




Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...


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


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


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

Тема: Составление цепи питания Цель: расширить знания о биотических факторах среды. Оборудование:гербарные растения...

В эволюции растений и животных. Цель: выявить ароморфозы и идиоадаптации у растений Цель: выявить ароморфозы и идиоадаптации у растений. Оборудование: гербарные растения, чучела хордовых (рыб, земноводных, птиц, пресмыкающихся, млекопитающих), коллекции насекомых, влажные препараты паразитических червей, мох, хвощ, папоротник...

Типовые примеры и методы их решения. Пример 2.5.1. На вклад начисляются сложные проценты: а) ежегодно; б) ежеквартально; в) ежемесячно Пример 2.5.1. На вклад начисляются сложные проценты: а) ежегодно; б) ежеквартально; в) ежемесячно. Какова должна быть годовая номинальная процентная ставка...

Признаки классификации безопасности Можно выделить следующие признаки классификации безопасности. 1. По признаку масштабности принято различать следующие относительно самостоятельные геополитические уровни и виды безопасности. 1.1. Международная безопасность (глобальная и...

Прием и регистрация больных Пути госпитализации больных в стационар могут быть различны. В цен­тральное приемное отделение больные могут быть доставлены: 1) машиной скорой медицинской помощи в случае возникновения остро­го или обострения хронического заболевания...

ПУНКЦИЯ И КАТЕТЕРИЗАЦИЯ ПОДКЛЮЧИЧНОЙ ВЕНЫ   Пункцию и катетеризацию подключичной вены обычно производит хирург или анестезиолог, иногда — специально обученный терапевт...

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