VR
Virtual Reality On-line   Журнал
Новости   |     Журнал    |    Хаkер    |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]

[ Download  ]
[  Конкурс  ]
[ Анекдоты  ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Программирование гнёзд для windows.
Введение
:

Интернет всё больше входит в нашу жизнь. Мы его используем как средство общения, средство получения информации, средство развлечения и т.д. Из всего этого следует, что для работы с ним необходимо множество программ и на рынке их очень много, но существует три наиболее распространённые ситуации, когда не возможно ими воспользоваться:

  • не хватает денег на приобретение лицензионной копии;
  • работа стандартной программы не устраивает по своим возможностям и удобству;
  • необходимой программы просто нет.

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

Второй и третий пункт в нашей стране встречается более чаще, поэтому программист начинает писать сам программку, в которой будут реализованы те или иные функции для работы с интернетом. Ты, конечно же, можешь сказать, что существует ещё одна причина - деньги. Если ты так считаешь, и взялся читсть мою книгу только для этого, то не теряй времени зря, лучше займись чем-нибудь другим. Если ты пишешь программу только ради денег, то ты не сможешь получить от неё нужного эффекта. Начинать писать программу можно только в том случае, если ты действительно видишь, что твоя будущая программа необходима.

Теперь встаёт вопрос: "Как писать?". Вот на этот вопрос мы и постараемся ответить. Несколько десятков лет назад, существовало множество методов для взаимодействия компьютеров между собой, но такое разнообразие привело к проблеме несовместимости программного обеспечения, поэтому программисты пришли к выводу, что необходимо стандартизировать процесс связи компьютеров по сети.

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

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


Первое знакомство :
Все люди как люди, а Microsoft пошла своим путём и немного по-своему реализовала гнёзда. Функции для работы с гнёздами расположены в файле Winsock.dll. Если ваш компьютер настроен для работы в сети, то этот файл должен находиться в директории Windows, если вы не нашли этого файла, то скорей всего ваша сеть сконфигурирована не правильно или у вас шоловливые руки, которые стёрли этот файл.

К достоинствам гнёзд можно отнести:

  • Программирование гнёзд, для различных платформ практически не отличается;
  • Возможна связь процессов находящихся на разных машинах и на разных платформах;

Реализация гнёзд в библиотеке Winsock.dll схожа с библиотеками UNIX систем, но в данной книге основной упор будет делаться на библиотеку Microsoft, в которой достаточно много различий, поэтому документация на UNIX систему вам поможет, но не силько.

Рисунок 1.

Связь через гнёзда происходит как на сервере, так и на клиенте через три уровня: гнёзд, протоколов и устройств. Уровень гнезд выполняет функции интерфейса между обращениями к операционной системе (системным функциям) и средствами низких уровней, уровень протоколов содержит модули, обеспечивающие взаимодействие процессов (на рисунке показаны протоколы TCP и IP), а уровень устройств содержит драйверы, управляющие сетевыми устройствами (драйвер сетевой карты, модема).

Уровень протоколов зависит от конфигурации операционной системы, я не зря указал TCP/IP так как он является транспортным протоколом сети интернет протоколом.

Гнёзда позволяют связываться двум процессам как внутри одной машины, так и нескольким машинам через сеть. Процессы взаимодействуют между собой по схеме клиент-сервер: сервер ждёт сигнала от гнезда, а клиенты обращаются к серверу через гнездо которое моет находится как на этом компьютере, так и на другом. Библиотека winsock обеспечивает связь между клиентом и сервером, передавая и принимая данные от клиента к серверу и обратно.

Гнезда бывают двух типов: виртуальный канал или потоковое гнездо и дейтаграмма. Виртуальный канал обеспечивает надежную доставку данных с сохранением исходной последовательности. Дейтаграммы не гарантируют надежную доставку с сохранением уникальности и последовательности, но они более экономны в использовании ресурсов, поскольку для них не требуются сложные установочные операции. В дальнейшем при рассмотрении функций Winsock я не буду останавливаться на данной теме, поэтому тебе необходимо сейчас понять различие между датаграммами и виртуальным каналом, потому что они программируются немного по разному. Основным отличием является инициализация и функции посылки и приёма информации.

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




Протоколы :
Наиболее распространённым является протокол TCP/IP. Этот протокол используют во всём мире для объединения компьютеров в сети, он также является основным протоколом в сети Internet.

Термин TCP/IP охватывает целую кучу протоколов, прикладные программы и даже саму сеть. Наиболее распространёнными протоколами семейства TCP/IP являются FTP, UDP, TELNET и др.

Рассмотрим протокол TCP немного подробнее. TCP занимает в многоуровневой архитектуре протоколов нишу непосредственно над протоколом Internet, который позволяет протоколу TCP отправлять и получать сегменты информации переменной длины, заключенные в оболочку Internet датаграмм. Internet датаграмма предоставляет средства для адресации отправителя и получателя сегментов TCP в различных сетях.

Протокол Internet также осуществляет любую фрагментацию и сборку сегментов TCP, необходимую для осуществления передачи и доставки через множество сетей и промежуточных шлюзов. Когда информация слишком большая, и не может быть передана одним пакетом, то протокол Internet разбивает информацию на пакеты, пересылает процессу-клиенту, а при приёме собирает в одно целое. Протокол Internet также обработывает информацию о приоритете, классификации безопасности, а также осуществляет разграничение TCP сегментов (необходимая информация берётся из заголовка, который мы рассмотрим ниже). Так что данная информация может быть передана напрямую через множество сетей. Для большей наглядности вышесказанного рассмотри следующий рисунок, он показывает четыре уровня TCP.

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

Одним из существенных недостатков пакетной передачи данных - большое количество служебной информации. К служебной информации я отношу заголовки протоколов. Так, например, при отправке одного пакета данных по протоколу TCP, вы отправляете вместе с данными два заголовка - заголовок протокола TCP и заголовок протокола Internnet.

Формат TCP заголовка:
Тебе не обязательно вникать и запоминать в структуру заголовка, потому что работа с Winsock позволяет работать с гнёздами на более высоком уровне.

Протокол TCP используют тогда, когда необходима гарантированная доставка информации. Соединение между процессом-сервером и процессом-клиентом образуют виртуальный канал, который обеспечивает гарантированность доставки пакетов. Виртуальный канал требует дополнительных ресурсов, как на машине-клиенте, так и на машине-сервере. Этот канал является дуплексным (пакеты могут направляться в обоих направлениях).

Протокол TCP немного медленней UDP, так как для обеспечения надёжности передачи пакетов, необходимы подтверждения об успешной доставке пакета. Если в течении определённого периода (таймаут) не пришло подтверждение об успешной доставки пакета, происходит повторная передача данных. Ты можешь сказать, что это слишком медленно, ждать пока сервер подтвердит каждый пакет, но клиент не делает этого. Протокол организован с использованием упреждающей отправки пакетов. Это значит, что процесс-клиент имеет право отправить определённое количество пакетов, не дожидаясь подтверждения их доставки. Если сервер присылает уведомление об ошибке приёма одного из пакетов, то процесс-клиент повторяет отправку данного пакета, и продолжает отправку следующих, пока снова не приедёт сообщение об ошибке или не выйдет время (таймаут). Точно так же происходит передача и в обратную сторону.

Для начала, тебе этих знаний больше чем достаточно, поэтому, я думаю, можно переходить к рассмотрению функций библиотеки WinSock, что мы и сделаем в следующем номере


Design by FMk group ©
Copyright©: Horrific aka Флёнов Михаил ©