Сидни Фейт - TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security)

Тут можно читать онлайн Сидни Фейт - TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство Лори, год 2000. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security)
  • Автор:
  • Жанр:
  • Издательство:
    Лори
  • Год:
    2000
  • Город:
    Москва
  • ISBN:
    5-85582-072-6
  • Рейтинг:
    3.5/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Сидни Фейт - TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) краткое содержание

TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) - описание и краткое содержание, автор Сидни Фейт, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

 Второе издание популярного справочника полностью переработано и расширено с целью предоставить читателю наиболее полное описание средств разработки, конфигурирования, использования и обслуживания сетей TCP/IP и соответствующих служб.

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

Издание содержит следующие дополнительные разделы:

• Безопасность IP и IPv6

• Описание средств WWW, новостей Интернета и приложений для работы с gopher

• Подробное описание серверов имен доменов (DNS), маски подсети и бесклассовой маршрутизации в Интернете

• Таблицы и протоколы маршрутизации

• Руководство по реализации средств безопасности для каждого из протоколов и приложений

• Примеры диалогов с новыми графическими инструментами

Новое издание бестселлера по TCP/IP станет незаменимым помощником для разработчиков сетей и приложений, для сетевых администраторов и конечных пользователей.

TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) - читать онлайн бесплатно полную версию (весь текст целиком)

TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) - читать книгу онлайн бесплатно, автор Сидни Фейт
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

hp = gethostbyname(argv[i]);

bcopy(hp->h_addr, &servAddr.sin_addr, hp->h_length);

servAddr.sin_port = htons(atoi(argv[2]));

3. connect(sock, &servAddr, sizeof(servAddr)); Вызов connect имеет форму:

connect(дескриптор_socket, адресная_структура, длина_адресной_структуры)

Клиент откроет соединение с сервером, IP-адрес и порт которого хранятся в адресной структуре.

4. send (sock, argv [3], strlen(argvs [3]), 0); Вызов send имеет форму:

возвращаемый_код = send(дескриптор_socket, буфер, длина_буфера, флаги)

Отметим, что введенный конечным пользователем третий аргумент (который появляется в программе как argv [ 3 ]) — это текст отправляемого сообщения. Обычно флаги используются для сообщения о срочных данных. В нашем случае параметры флагов установлены в 0.

5. close(sock);

Клиент выполняет close для закрытия соединения.

21.8 Более простой сервер

Многие серверы разрабатываются как в показанном выше примере. Однако можно использовать более упрощенную модель, когда сервер должен выполнять только простые запросы клиента (см. ниже).

Вместо создания дочернего процесса для каждого клиента сервер может непосредственно выполнять запрос, а затем закрывать соединение. Очередь сервера позволяет нескольким другим клиентам ожидать, пока он не будет готов обработать их запросы.

Ниже приведен листинг для более простого сервера. К этому серверу клиенты также могут обращаться через рассмотренную выше программу tcpclient .

/* tcpsimp.c

* Для запуска программ ввести "tcpsimp" */

/* Сначала включить стандартные заголовочные файлы. */

#include

#include

#include

#include

#include

#include

main() {

int sockMain, sockClient, length, child;

struct sockaddr_in servAddr;

/* 1. Создать главный socket. */

if ( (sockMain = socket (AF_INET, SOCK_STREAM, 0)) < 0) {

perror("Сервер не может открыть главный socket.");

exit(1);

}

/* 2. Ввести информацию в структуру данных, используемую для

* хранения локального IP-адреса и порта, "sin" в именах

* переменных — это сокращение от "socket internet". */

bzero((char *)&servAddr, sizeof(servAddr));

servAddr.sin_family = AF_INET;

servAddr.sin_addr.s_addr = htonl(INADDR_ANY);

servAddr.sin_port = 0;

/* 3. Вызвать bind, которая запишет используемый номер порта

* в servAddr. */

if (bind(sockMain, &servAddr, sizeof(servAddr)) ) {

perror("Вызов bind от сервера неудачен.");

exit(1);

}

/* 4. Чтобы узнать номер порта, следует использовать функцию

* getsockname() для копирования порта в servAddr. */

length = sizeof(servAddr);

if (getsockname(sockMain, &servAddr, &length)) {

perror("Вызов getsockname неудачен.");

exit(1);

}

printf ("SERVER: Номер порта %d\n", ntohs(servAddr.sin_port));

/* 5. Установить очередь на пять клиентов.*/

listen(sockMain, 5);

/* 6. Ожидать поступления клиентов. Вызов accept возвратит

* дескриптор нового socket, который следует использовать клиенту. */

for(;;) {

if ((sockClient = accept(sockMain, 0, 0)) < 0) {

perror("Неверный socket клиента.");

exit(1);

}

/* 7. Обслужить клиента и закрыть соединение с ним. */

doTask(sockClient);

close(sockClient);

}

}

/* Читать один поступивший буфер, распечатать некоторую информацию

* и завершить работу. */

#define BUFLEN 81

int doTask(sockClient)

int sockClient;

{

char buf[BUFLEN];

int msgLength;

/* 8. Опустошение буфера и вызов recv

* для получения сообщения от клиента. */

bzero(buf, BUFLEN);

if ((msgLength = recv(sockClient,buf, 80, 0)) < 0) {

perror("Неверное получение." );

exit(1);

}

printf("SERVER: Socket для клиента %d\n", sockClient);

printf("SERVER: Длина сообщения %d\n", msgLength);

printf("SERVER: Сообщение: %s\n\n", buf);

}

21.9 Интерфейс программирования socket для UDP

Мы познакомились с наиболее общим интерфейсом программирования TCP. Теперь рассмотрим программирование сервера и клиента UDP. На рис. 21.3 показана схема диалога UDP между клиентом и сервером. Вызовы socket () и bind () быстро выполняются и немедленно возвращают ответ. Вызов recvfrom предполагает режим блокирования по умолчанию, который можно изменить на неблокированный (т.е. асинхронный) режим.

Рис 213Типичные программные вызовы в socket UDP 2110 Программа сервера UDP - фото 217

Рис. 21.3.Типичные программные вызовы в socket UDP

21.10 Программа сервера UDP

Показанная ниже программа создает socket для UDP, связывает вызов с портом, а затем получает и распечатывает сообщения, которые посылаются на этот порт:

/* udpserv.c

* Для запуска программы ввести "udpserv".

*

* Сначала включить стандартные заголовочные файлы. */

#include

#include

#include

#include

#include

#include

#define BUFLEN 81

main() {

int sockMain, addrLength, msgLength;

struct sockaddr_in servAddr, clientAddr;

char buf[BUFLEN];

/* 1. Создать socket для UDP. */

if ((sockMain = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {

perror("Сервер не может открыть socket для UDP.");

exit(1);

}

/* 2. Ввести информацию в структуру данных, используемую для хранения локальных

* IP-адресов и порта. Возложить на bind получение свободных портов. */

bzero((char *)&servAddr, sizeof(servAddr));

servAddr.sin_family = AF_INET;

servAddr.sin_addr.s_addr = htonl(INADDR_ANY);

servAddr.sin_port = 0;

/* 3. Вызвать bind, которая запишет номер используемого порта

* в TCB. */

if (bind(sockMain, &servAddr, sizeof(servAddr))) {

perror("Вызов bind от сервера неудачен.");

exit(1);

}

/* 4. Извлекаем номер порта и используем функцию

* getsockname() для копирования порта в servAddr. */

addrLength = sizeof(servAddr);

if ( getsockname(sockMain, &servAddr, &addrLength)) {

perror(Вызов getsockname неудачен.");

exit(1);

}

printf("SERVER: Номер порта is %d\n", ntohs(servAddr.sin_port));

/* 5. Бесконечный цикл ожидания сообщений от клиентов. */

for (;;) {

addrLength = sizeof(clientAddr);

bzero(buf, BUFLEN);

if ((msgLength = recvfrom(sockMain, buf, BUFLEN, 0, &clientAddr, &addrLength)) < 0) {

perror("Плохой socket клиента.");

exit(1);

}

/* 6. Распечатать клиентские IP-адрес и порт вместе с сообщением. */

printf("SERVER: IP-адрес клиента: %s\n",

inet_ntoa(clientAddr.sin_addr));

printf("SERVER: Порт клиента: %d\n",

ntohs(clientAddr.sin_port));

printf("SERVER: Длина сообщения %d\n", msgLength);

printf("SERVER: Сообщение: %s\n\n", buf);

}

}

21.10.1 Вызовы в серверной программе UDP

1. sockMain = socket(AF_NET, SOCK_DGRAM, 0);

Семейство адресов — снова Интернет.

2. bzero((char *)&servAddr, sizeof(servAddr));

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Сидни Фейт читать все книги автора по порядку

Сидни Фейт - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) отзывы


Отзывы читателей о книге TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security), автор: Сидни Фейт. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x