Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Событийная модель соединения сокетов.
Класс WinSock позволяет работать с сокетами в рамках трех подходов, против двух классических. А именно, обычная блокирующая передача данных, неблокирующая передача данных, событийно ориентированная передача данных. При 3 подходе создаваемый сокет имеет ряд связанных с ним событий, реакцию на которые определяет пользователь. Общеизвестный факт, что все ПО развивается в сторону унификации интерфейса, это позволяет значительно упростить и ускорить его использование для пользователя. Вполне логично, что унификация программного API приводит к более эффективному и грамотному его использованию программистами, которые выступают в роли потребителей API. В событийном подходе мы исходим от события, мы знаем для какого сокета есть новости. Если задуматься на тему что такое поступление новых данных в сокет или, например, что такое закрытие сокета с другой стороны. Можно придти к простому выводу - это события. Такие же события, как наступления времени Х или любое другое событие в программе. Более того, абсолютно законна постановка вопроса: "ждем пока произойдет какое-нибудь событие или пока придут данные от сокета". Поэтому это правильно и логично, что и работа с сокетами должна строится на событиях. Для работы с сокетами в ходе лаб использовался класс CAsyncSocket, который инкапсулирует возможности работы с WinSock. Основными событиями в данном классе являются следующие:
Источники: http://www.kalinin.ru/programming/network/12_12_00.shtml http://msdn2.microsoft.com/en-us/library/09353w3t(VS.80).aspx Особенности программирования сетевого приложения. Чтобы две программы могли общаться друг с другом через сеть, каждая из них должна создать сокет. Каждый сокет обладает двумя основными характеристиками: протоколом и адресом, к которым он привязан. Протокол задаётся при создании сокета и не может быть изменён впоследствии. Адрес сокета задаётся позже, но обязательно до того, как через сокет пойдут данные. Формат адреса сокета определяется конкретным протоколом. В частности, для протоколов TCP и UDP адрес состоит из IP-адреса сетевого интерфейса и номера порта. При использовании TCP сервер сам не является инициатором подключения, но может работать с любым подключившимся клиентом, какой бы у него ни был адрес. Для сервера принципиально, какой порт он будет использовать - если порт не определён заранее, клиент не будет знать, куда подключаться. Поэтому номер порта является важным признаком для сервера. С другой стороны, клиенту обычно непринципиально, какой порт будет у его сокета, поэтому чаще всего сервер использует фиксированный порт, а клиент оставляет выбор системе. Протокол UDP не поддерживает соединение, но при его использовании часто одно приложение тоже можно условно назвать сервером, а другое - клиентом. Сервер создаёт сокет и ждёт, когда кто-нибудь что-нибудь пришлёт и высылает что-то в ответ, а клиент сам отправляет что-то куда-то. Поэтому, как и в случае TCP, сервер должен использовать фиксированный порт, а клиент может выбирать любой свободный. В программе-сервер закладывается способность ожидать появления запроса от клиента на определенном порту. Для этого используется отдельный сокет. Для установления соединения с каждым клиентом сервер выделяет один сокет. Клиенту для организации взаимодействия с сервером необходим один сокет. Таким образом для создания N соединений будет задействован 2N + 1 сокет. Источники: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1021 http://home.tula.net/angel/les15.html Этапы организации соединения сокетов.
Если у сервера не осталось свободных сокетов для подключения очередного клиента, то необходимо организовать соединение с фиктивным сокетом для продвижения очереди запросов, после чего сразу же его разорвать. Организация сетевого соединения со стороны клиента. Для организации соединения с сервером клиент создает сокет (функция Create(), номер порта не важен) и отправляет запрос на подключение к сокету сервера Connect(m_ipaddr, m_port). При завершении попытки вызывается событие OnConnect(ErrCode). При установке соединения ErrCode = 0. Организация сетевого соединения со стороны сервера. Для организации сетевого соединения сервер создает слушающий сокета с заданным номером порта (функция Create(n_port), IP адрес присваивается сам) и запускает его на прослушивание среды (функция Listen()); При приеме от клиента запроса на подключение (событие OnAccept) сервер выделяет клиенту сокет для организации соединения (метод Accept для выделяемого сокета). Особенности программирования приложения-клиента. Приложение клиент должно имеет один сокет для установления соединения с сервером. Особенности программирования приложения-сервера. В программе-сервер закладывается способность ожидать появления запроса от клиента на определенном порту. Для этого используется отдельный сокет. Для установления соединения с каждым клиентом сервер выделяет один сокет. Сокеты. Понятие гнездового соединения. Каждый процесс может создать слушающий сокет и привязать его к какому-нибудь порту компьютера. Слушающий процесс обычно находится в цикле ожидания, то есть просыпается при появлении нового соединения. При этом сохраняется возможность просто проверить наличие соединений на данный момент, установить тайм-аут для операции и так далее. Обычно клиент явно подсоединяется к слушателю, после чего любое чтение или запись через его файловый дескриптор будут на самом деле передавать данные между ним и сервером. Зам. Такое соединение точка-точка между 2 сокетами по всей видимости называется гнездовым. Источник: http://ru.wikipedia.org/wiki/Сокет_(программный_интерфейс) |
||||||||||||
Последнее изменение этой страницы: 2018-04-12; просмотров: 224. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |