Как ставится двойная розетка


Как подключить двойную розетку? Основные методы подключения

Монтаж простых электрических приборов не требует специальной подготовки. Но элементарные знания по технике электробезопасности и навыки владения отверткой, плоскогубцами и другими инструментами необходимы. Сегодня нередко возникают ситуации, когда увеличение количества бытовой техники требует ее подключения в разных комнатах. А свободные точки отсутствуют. Поэтому приходится снимать одинарные и устанавливать двойные, тройные системы, а иногда и комбинированные.

Правила подключения двойной розетки

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

Самым насыщенным по количеству потребителей помещением в стандартной квартире является кухня. Особенно, если это малогабаритная «хрущевка» или «брежневка». Здесь находится место даже для стиральной машины, которая не помещается в совмещенном санитарном узле. Сейчас диапазон используемой техники настолько широк, что 2-3 розетками никак не обойтись.

Современные кухонные гарнитуры скрывают за своими сверкающими панелями самые уникальные изобретения, помогающие облегчить труд хозяйки:
• электронные или газовые варочные панели;
• посудомоечные машины;
• вытяжные системы;
• холодильники, рефрижераторные комплексы и камеры.

Это не считая микроволновок, электрочайников, кофеварок и прочей мелочи. И все они требуют своего места включения. Система включения при этом имеет двухэтажную планировку. Первый план располагается на уровне пола, второй – на высоте человека среднего роста.

Важно! Перед началом подключения двойной розетки к одному кабелю нужно отключить соответствующий автомат на щитке питания, если их там несколько. При отсутствии такового – отключается общий.

Подключение проводов к двойной розетке выполняется следующим образом. Для проверки их принадлежности к фазе или нулю нужен простой тестер в виде отвертки с индикатором на ручке. Если при касании отверткой провода индикатор засветился, значит это фаза, если нет – провод нейтральный. Согласно правилам, разная расцветка проводов говорит о принадлежности. Обычно коричневый – это фаза, голубой – ноль, а желтый с зеленым – заземление. Еще одно правило подключение проводки. К правой клемме подключается фаза, к левой – ноль, к центральной, со скобой – земля.

Заметка! Сдвоенные розетки имеют общую клемму питания. Ток на каждое устройство поступает через распределительную планку. При одинаковом напряжении в сети (220 В) сила тока на каждый прибор будет зависеть от мощности подключаемой техники. Розетка хоть и двойная, но нагрузочная мощность не увеличится в два раза. Обязательно, чтобы подходящий к розетке кабель имел сечение не меньше, чем общий по дому (оптимальный вариант – одинаковое). Материал жил также должен совпадать. Если вся разводка медная, то и к устройству подводится медный кабель.

 

Схема подключения двойной розетки с заземлением

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

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

 

 

Важно! К какому контакту подключать фазу и нуль не принципиально. Главное – не к одному контакту, чтобы не произошло короткого замыкания.

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

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

Заметка! Современные вилки бытового оборудования не удобны для включения в сдвоенные евророзетки. Приходится их поворачивать. Поэтому, чтобы устранить этот дискомфорт можно воспользоваться двумя одинарными гнездами.

Подключение двойного выключателя и розетки

Блок, управляющий работой розетки и двухклавишного выключателя, монтируется перед входной дверью в ванную комнату или туалет. Благодаря устройству пользователь может включать свет в двух комнатах.
Сначала прокладываются пять проводов от щитка электроснабжения. Два из них – нуль и заземление идут на розетку. Фаза соединяется с розеткой и через перемычку подается на выключатель. Две фазные жилы от выключателя идут на приборы освещения. Нуль, идущий к розетке, в распределительном блоке соединяется с нулем, идущим на патроны освещения.

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

Как подключить двойную внешнюю розетку?

Распределительный кабель прокладывается открытым методом или закрытым в стенах. Для монтажа наружных устройств проводка выполняется открытым способом. Она может находиться в гофре, в коробах или просто лежать на стене, зафиксированная клипсами. Работа происходит в несколько этапов:
1. Обесточивается сеть питания на электрощитке. После чего с помощью указателя напряжения проверяется отсутствие напряжения на самих приборах.
2. Открывается верхняя панель гнезда для освобождения доступа к фиксаторам, удерживающим панель.
3. Отжиманием крепежа отделяется верхняя часть прибора от суппорта.
4. Разбирается устройство. Оно состоит из корпуса, панели с крышкой, гнезд.


5. Отмечается место крепежных отверстий.
6. Фиксируется основание прибора с помощью дюбелей типа гвозди.
7. Вырезается заглушка в месте ввода кабеля в середину устройства. Если кабель проложен в гофрированной трубе, то её заводят прямо в середину розетки.
8. Кабель освобождается от изоляции и зачищаются концы жил на 10-15 мм.
9. Производится подсоединение жил к контактам – коричневый к фазе (крайняя справа клемма), голубой – к нулю (крайняя слева клемма), желто-зеленый – к земле (центральный контакт со скобой).
10. Питание гнезд второй розетки в корпусе производится с помощью перемычек или шлейфов.
11. Затем восстанавливается корпус наружной розетки в обратном порядке.

Как последовательно подключить двойные компьютерные розетки?

Для уменьшения нагрузки электромагнитного излучения в квартирах вместо Wi-Fi роутера устанавливают компьютерные розетки. Их монтаж производится в соответствии с правилами электробезопасности. Выпускаются изделия под скрытую и открытую проводку.

Как и силовые розетки, интернет-аналоги вставляются в гнезда. Приборы RJ-45 обеспечивают подключение компьютера к интернет- и местной сети. Наличие разъемов под витую пару –обязательное условие для нормального функционирования комнат серверного назначения. Использование только беспроводной системы передачи данных опасно с точки зрения перехвата связи. Через проводку украсть информацию можно только, подключившись к ней.

RJ-45 – это универсальный способ соединения компьютерной техники с применением 8-жильного защищенного кабеля, который и называется «витая пара». Розетки классифицируются по числу разъемов на:
• одинарные;
• двойные;
• терминальные;
• комбинированные.

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

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

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

Посмотрите видео «Как подключить двойную розетку»

 

        Поделиться:
Сокет

- сетевой интерфейс низкого уровня - документация Python 3.9.0

Исходный код: Lib / socket.py


Этот модуль обеспечивает доступ к интерфейсу сокета BSD . Он доступен на все современные системы Unix, Windows, MacOS и, возможно, дополнительные платформы.

Примечание

Некоторое поведение может зависеть от платформы, так как звонки выполняются в операционную API системных сокетов.

Интерфейс Python представляет собой прямую транслитерацию системы Unix. вызов и интерфейс библиотеки для сокетов в объектно-ориентированном стиле Python: Функция socket () возвращает объект сокета , методы которого реализуют различные системные вызовы сокетов.Типы параметров несколько выше, чем в интерфейсе C: как с операциями read () и write () на Python файлы, распределение буфера при операциях приема выполняется автоматически, а длина буфера неявно используется в операциях отправки.

См. Также

Модуль socketserver

Классы, упрощающие запись сетевых серверов.

Module ssl

Оболочка TLS / SSL для объектов сокета.

Семейства розеток

В зависимости от системы и вариантов сборки, различные семейства сокетов поддерживаются этим модулем.

Формат адреса, требуемый конкретным объектом сокета, автоматически выбрано на основе семейства адресов, указанного, когда объект сокета был создан. Адреса сокетов представлены следующим образом:

  • Адрес сокета AF_UNIX , привязанного к узлу файловой системы представлен в виде строки с использованием кодировки файловой системы и 'surrogateescape' обработчик ошибок (см. PEP 383 ).Адрес в Абстрактное пространство имен Linux возвращается как байтовый объект с начальный нулевой байт; обратите внимание, что сокеты в этом пространстве имен могут взаимодействовать с обычными сокетами файловой системы, поэтому программы, предназначенные для при запуске в Linux может потребоваться иметь дело с обоими типами адресов. Строка или байтовый объект может использоваться для любого типа адреса, когда передавая это как аргумент.

    Изменено в версии 3.3: Раньше предполагалось, что пути сокетов AF_UNIX используют UTF-8 кодирование.

  • Пара (хост, порт) используется для семейства адресов AF_INET , где host - это строка, представляющая либо имя хоста в Интернет-домене запись типа 'daring.cwi.nl' или адрес IPv4, например '100.50.200.5' , и порт - целое число.

    • Для адресов IPv4 вместо хоста принимаются две специальные формы адрес: '' представляет INADDR_ANY , который используется для привязки ко всем интерфейсов, а строка '' представляет ИНАДДР_БРОАДКАСТ .Такое поведение несовместимо с IPv6, поэтому вы можете захотеть избежать этого, если намерены поддерживать IPv6 с помощью своего Программы Python.

  • Для семейства адресов AF_INET6 , четыре кортежа (хост, порт, flowinfo, scope_id) , где flowinfo и scope_id представляют sin6_flowinfo и sin6_scope_id членов в структуре struct sockaddr_in6 в C. Для socket методы модуля, flowinfo и scope_id могут быть опущены только для Обратная совместимость.Обратите внимание, однако, что пропуск scope_id может вызвать проблемы. в манипулировании адресами IPv6 с заданной областью.

    Изменено в версии 3.7: Для многоадресных адресов (с scope_id значимым) адрес может не содержать % scope_id (или id зоны ) часть. Эта информация является излишней и может безопасно опустить (рекомендуется).

  • AF_NETLINK сокеты представлены парами (pid, groups) .

  • Поддержка TIPC только для Linux доступна с использованием AF_TIPC адрес семьи.TIPC - это открытый сетевой протокол, не основанный на IP, разработанный для использования в кластерных компьютерных средах. Адреса представлены кортеж, а поля зависят от типа адреса. Общая форма кортежа (addr_type, v1, v2, v3 [, scope]) , где:

    • addr_type является одним из TIPC_ADDR_NAMESEQ , TIPC_ADDR_NAME , или TIPC_ADDR_ID .

    • область действия является одним из TIPC_ZONE_SCOPE , TIPC_CLUSTER_SCOPE и ТИПС_НОД_СКОПЕ .

    • Если addr_type - это TIPC_ADDR_NAME , то v1 - это тип сервера, v2 - это идентификатор порта, а v3 должно быть 0.

      Если addr_type - это TIPC_ADDR_NAMESEQ , то v1 - это тип сервера, v2 - это нижний номер порта, а v3 - это верхний номер порта.

      Если addr_type - это TIPC_ADDR_ID , то v1 - это узел, v2 - это ссылка, а v3 должно быть установлено на 0.

  • Кортеж (интерфейс,) используется для семейства адресов AF_CAN , где interface - строка, представляющая имя сетевого интерфейса, например 'can0' . Имя сетевого интерфейса '' может использоваться для приема пакетов. от всех сетевых интерфейсов этого семейства.

    • Протокол CAN_ISOTP требует кортежа (interface, rx_addr, tx_addr) где оба дополнительных параметра представляют собой длинное целое число без знака, которое представляет собой Идентификатор CAN (стандартный или расширенный).

    • Протокол CAN_J1939 требует кортежа (интерфейс, имя, pgn, адрес) где дополнительные параметры - это 64-битное целое число без знака, представляющее Имя ЭБУ, 32-битное целое число без знака, представляющее номер группы параметров (PGN) и 8-битное целое число, представляющее адрес.

  • Строка или кортеж (id, unit) используется для SYSPROTO_CONTROL протокол семейства PF_SYSTEM .Строка - это имя управление ядром с использованием динамически назначаемого идентификатора. Кортеж можно использовать, если ID и номер единицы управления ядром известны или если зарегистрированный идентификатор используемый.

  • AF_BLUETOOTH поддерживает следующие протоколы и адреса форматы:

    • BTPROTO_L2CAP принимает (bdaddr, psm) , где bdaddr - адрес Bluetooth в виде строки, а psm - целое число.

    • BTPROTO_RFCOMM принимает (bdaddr, канал) , где bdaddr - это адрес Bluetooth в виде строки, а канал , - целое число.

    • BTPROTO_HCI принимает (устройство_

.

Что такое розетка? (Учебники по Java ™> Пользовательские сети> Все о сокетах)

Обычно сервер работает на определенном компьютере и имеет сокет, привязанный к определенному номеру порта. Сервер просто ждет, слушая сокет, чтобы клиент сделал запрос на соединение.

На стороне клиента: клиент знает имя хоста машины, на которой работает сервер, и номер порта, на котором сервер прослушивает. Чтобы сделать запрос на соединение, клиент пытается встретиться с сервером на машине и порту сервера.Клиент также должен идентифицировать себя для сервера, чтобы он привязался к номеру локального порта, который он будет использовать во время этого соединения. Обычно это назначается системой.

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

На стороне клиента, если соединение принято, сокет успешно создан, и клиент может использовать сокет для связи с сервером.

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


Определение:

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


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

Пакет java.net на платформе Java предоставляет класс Socket , который реализует одну сторону двустороннего соединения между вашей программой Java и другой программой в сети. Класс Socket находится на вершине платформенно-зависимой реализации, скрывая детали любой конкретной системы от вашей программы Java.Используя класс java.net.Socket вместо того, чтобы полагаться на собственный код, ваши программы Java могут обмениваться данными по сети независимо от платформы.

Кроме того, java.net включает класс ServerSocket , который реализует сокет, который серверы могут использовать для прослушивания и приема соединений с клиентами. В этом уроке показано, как использовать классы Socket и ServerSocket .

Если вы пытаетесь подключиться к Интернету, класс URL и связанные классы ( URLConnection , URLEncoder ), вероятно, более подходят, чем классы сокетов.Фактически, URL-адреса являются относительно высокоуровневым соединением с Интернетом и используют сокеты как часть базовой реализации. Видеть Работа с URL-адресами для получения информации о подключении к Интернету через URL-адреса.

.

17,2. socket - низкоуровневый сетевой интерфейс - документация Python 2.7.18

Этот модуль обеспечивает доступ к интерфейсу BSD socket . Он доступен на все современные системы Unix, Windows, Mac OS X, BeOS, OS / 2 и, возможно, дополнительные платформы.

Примечание

Некоторое поведение может зависеть от платформы, так как звонки выполняются в операционную API системных сокетов.

Введение в программирование сокетов (на C) см. В следующих статьях: Вводный 4.Учебное пособие по межпроцессному взаимодействию 3BSD, Стюарт Сехрест и Расширенное руководство по межпроцессному взаимодействию 4.3BSD, Сэмюэл Дж. Леффлер и др. al, оба в Руководстве программиста UNIX, Дополнительные документы 1 (разделы PS1: 7 и PS1: 8). Справочные материалы по конкретной платформе для различных системные вызовы, связанные с сокетами, также являются ценным источником информации о детали семантики сокета. Для Unix см. Справочные страницы; для Windows, см. спецификацию WinSock (или Winsock 2).Для API, поддерживающих IPv6, читатели могут хочу сослаться на RFC 3493 , озаглавленный «Расширения базового интерфейса сокетов для IPv6».

Интерфейс Python представляет собой прямую транслитерацию системы Unix. вызов и интерфейс библиотеки для сокетов в объектно-ориентированном стиле Python: Функция socket () возвращает объект сокета , методы которого реализуют различные системные вызовы сокетов. Типы параметров несколько выше, чем в интерфейсе C: как с операциями read () и write () на Python файлы, распределение буфера при операциях приема выполняется автоматически, а длина буфера неявно используется в операциях отправки.

Адреса сокетов представлены следующим образом: одна строка используется для AF_UNIX семейство адресов. Пара (хост, порт) используется для AF_INET Семейство адресов , где host - строка, представляющая либо имя хоста в нотации домена Интернет, например 'daring.cwi.nl' или адрес IPv4 например, '100.50.200.5' и порт является целым числом. За AF_INET6 семейство адресов, четыре кортежа (хост, порт, flowinfo, scopeid) , где flowinfo и scopeid представляет sin6_flowinfo и sin6_scope_id член в struct sockaddr_in6 в C.За socket методы модуля, flowinfo и scopeid могут быть опущены только для Обратная совместимость. Обратите внимание, однако, что отсутствие scopeid может вызвать проблемы. в манипулировании адресами IPv6 с заданной областью. Другие семейства адресов в настоящее время не поддерживается. Формат адреса, требуемый конкретным объектом сокета: автоматически выбирается на основе семейства адресов, указанного, когда сокет объект был создан.

Для адресов IPv4 используются две специальные формы вместо адреса хоста: пустая строка представляет INADDR_ANY , а строка '' представляет INADDR_BROADCAST .Поведение не доступен для IPv6 для обратной совместимости, поэтому вы можете избежать это, если вы собираетесь поддерживать IPv6 в своих программах Python.

Если вы используете имя хоста в части host адреса сокета IPv4 / v6, программа может показывать недетерминированное поведение, поскольку Python использует первый адрес вернулся из разрешения DNS. Адрес сокета будет разрешен по-разному в фактический адрес IPv4 / v6, в зависимости от результатов DNS разрешение и / или конфигурация хоста.Для детерминированного поведения используйте числовой адрес в части хоста .

Новое в версии 2.5: сокеты AF_NETLINK представлены парами pid, группами .

Новое в версии 2.6: поддержка TIPC только для Linux также доступна при использовании AF_TIPC адрес семьи. TIPC - это открытый сетевой протокол, не основанный на IP, разработанный для использования в кластерных компьютерных средах. Адреса представлены кортеж, а поля зависят от типа адреса.Общая форма кортежа (addr_type, v1, v2, v3 [, scope]) , где:

  • addr_type является одним из TIPC_ADDR_NAMESEQ , TIPC_ADDR_NAME , или TIPC_ADDR_ID .

  • область является одним из TIPC_ZONE_SCOPE , TIPC_CLUSTER_SCOPE , и TIPC_NODE_SCOPE .

  • Если addr_type - это TIPC_ADDR_NAME , то v1 - это тип сервера, v2 - это идентификатор порта, а v3 должен быть 0.

    Если addr_type - это TIPC_ADDR_NAMESEQ , то v1 - это тип сервера, v2 - это нижний номер порта, а v3 - это верхний номер порта.

    Если addr_type - это TIPC_ADDR_ID , то v1 - это узел, v2 - это ссылка, а v3 должно быть установлено на 0.

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

Неблокирующий режим поддерживается с помощью setblocking () . А обобщение этого на основе тайм-аутов поддерживается через settimeout () .

Модуль socket экспортирует следующие константы и функции:

исключение сокет. ошибка

Это исключение возникает для ошибок, связанных с сокетом. Сопутствующая стоимость составляет либо строка, указывающая, что пошло не так, либо пара (errno, string) представляет ошибку, возвращаемую системным вызовом, аналогично значению сопровождающий os.ошибка . См. Модуль errno , который содержит имена для кодов ошибок, определенных базовой операционной системой.

исключение сокет. Геррор

Это исключение возникает для ошибок, связанных с адресом, т. Е. Для функций, которые используют h_errno в C API, включая gethostbyname_ex () и gethostbyaddr () .

Сопутствующее значение - пара (h_errno, строка) , представляющая ошибку возвращается вызовом библиотеки. строка представляет собой описание h_errno , как возвращается функцией hstrerror () C.

исключение сокет. гайеррор

Это исключение возникает для ошибок, связанных с адресом, для getaddrinfo () и getnameinfo () . Сопутствующее значение - пара (ошибка, строка) представляет ошибку, возвращенную вызовом библиотеки. строка представляет Описание ошибки , возвращенной функцией C. gai_strerror () .В Ошибка Значение будет соответствовать одной из констант EAI_ * , определенных в этом модуль.

исключение сокет. таймаут

Это

.

Использование сокетов и потоков сокетов

В этой статье объясняется, как работать с сокетами и потоками сокетов на различных уровнях, от POSIX до Foundation.

Важно: В этой статье описаны способы создания соединений через сокеты, полностью контролируемые вашей программой. Большинство программ лучше обслуживаются высокоуровневыми API, такими как NSURLConnection . Чтобы узнать больше об этих высокоуровневых API, прочтите Обзор сети .

API, описанные в этой статье, следует использовать только в том случае, если вам необходимо поддерживать какой-либо протокол, отличный от протоколов, поддерживаемых встроенными функциями Cocoa или Core Foundation.

Практически на каждом уровне сети программное обеспечение можно разделить на две категории: клиенты (программы, которые подключаются к другим приложениям) и службы (программы, к которым подключаются другие приложения). На высоком уровне эти линии ясны. Большинство программ, написанных с использованием API высокого уровня, являются исключительно клиентами. Однако на более низком уровне линии часто размыты.

Программирование сокетов и потоков обычно попадает в одну из следующих широких категорий:

  • Связь на основе пакетов - программы, которые работают с одним пакетом за раз, прослушивая входящие пакеты, а затем отправляя пакеты в ответ.

    При пакетной связи единственные различия между клиентами и серверами заключаются в содержимом пакетов, которые каждая программа отправляет и получает, и (предположительно) в том, что каждая программа делает с данными. Сам сетевой код идентичен.

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

    При потоковой связи клиенты и серверы несколько более различимы. Фактическая часть обработки данных клиентов и серверов аналогична, но способ, которым программа изначально создает канал связи, очень отличается.

Эта глава разделена на разделы, основанные на перечисленных выше задачах:

Выбор семейства API

API, который вы выбираете для соединений на основе сокетов, зависит от того, выполняете ли вы соединение с другим хостом или получаете соединение от другого хост.Это также зависит от того, используете ли вы TCP или какой-либо другой протокол. Вот несколько факторов, которые следует учитывать:

  • В OS X, если у вас уже есть сетевой код, который используется совместно с платформами, отличными от Apple, вы можете использовать сетевые API POSIX C и продолжать использовать свой сетевой код как есть (на отдельный поток). Если ваша программа основана на цикле выполнения Core Foundation или Какао (Foundation), вы также можете использовать API Core Foundation CFStream для интеграции сетевого кода POSIX в вашу общую архитектуру в основном потоке.В качестве альтернативы, если вы используете Grand Central Dispatch (GCD), вы можете добавить сокет в качестве источника отправки.

    В iOS использование сетей POSIX не рекомендуется, поскольку они не активируют сотовую радиосвязь или VPN по запросу. Таким образом, как правило, вы должны отделить сетевой код от любых общих функций обработки данных и переписать сетевой код, используя API более высокого уровня.

    Примечание: Если вы используете сетевой код POSIX, вы должны знать, что сетевой API POSIX не зависит от протокола (вы должны самостоятельно уладить некоторые различия между IPv4 и IPv6).Это API подключения по IP, а не API подключения по имени, что означает, что вам нужно проделать много дополнительной работы, если вы хотите достичь той же производительности и надежности при начальном подключении, которые предоставляют вам высокоуровневые API. бесплатно. Прежде чем вы решите повторно использовать существующий сетевой код POSIX, обязательно прочтите статью «Избегайте разрешения DNS-имен перед подключением к хосту» в Networking Overview .

  • Для демонов и служб, которые прослушивают порт, или для подключений без TCP, используйте сетевые API-интерфейсы C. POSIX или Core Foundation ( CFSocket ).

  • Для клиентского кода в Objective-C используйте сетевые API Foundation Objective-C. Foundation определяет классы высокого уровня для управления URL-соединениями, потоками сокетов, сетевыми службами и другими сетевыми задачами. Это также основная платформа Objective-C, не связанная с пользовательским интерфейсом, в OS X и iOS, предоставляющая процедуры для циклов выполнения, обработки строк, объектов коллекции, доступа к файлам и т. Д.

  • Для клиентского кода на C используйте сетевые API-интерфейсы Core Foundation C. Фреймворк Core Foundation и фреймворк CFNetwork являются двумя основными фреймворками языка C в OS X и iOS.Вместе они определяют функции и структуры, на которых построены сетевые классы Foundation.

    Примечание: В OS X CFNetwork является подфреймворком структуры Core Services; в iOS CFNetwork - это фреймворк верхнего уровня.

Написание клиента на основе TCP

Способ создания исходящего соединения зависит от того, какой язык программирования вы используете, от типа соединения (TCP, UDP и т. Д.) И от того, пытаетесь ли вы делиться кодом с другими платформами (не Mac и iOS).

  • Используйте NSStream для исходящих соединений в Objective-C.

    Если вы подключаетесь к определенному хосту, создайте объект CFHost (, а не , NSHost - они не имеют бесплатного моста), затем используйте CFStreamCreatePairWithSocketToHost или CFStreamCreateToHost, подключенный к open aopenCreatePair8 с хост и порт и свяжите с ним пару объектов CFStream . Затем вы можете преобразовать их в объект NSStream .

    Вы также можете использовать функцию CFStreamCreatePairWithSocketToNetService с объектом CFNetServiceRef для подключения к службе Bonjour. Прочтите Обнаружение и Рекламу сетевых услуг в Обзор сети для получения дополнительной информации.

    Примечание: Метод getStreamsToHost: port: inputStream: outputStream: для NSNetService недоступен в iOS и не рекомендуется в OS X по соображениям производительности. В частности, NSNetService требует, чтобы вы создали экземпляр NSHost .При создании объекта поиск выполняется синхронно. Таким образом, создавать объект NSHost в основном потоке приложения небезопасно. Подробнее см. NSNetService и Автоматический подсчет ссылок (ARC) .

  • Используйте CFStream для исходящих соединений в C.

    Если вы пишете код, который не может включать Objective-C, используйте CFStream API. Он легче интегрируется с другими API-интерфейсами Core Foundation, чем CFSocket , и включает сотовое оборудование на iOS (где применимо), в отличие от API нижнего уровня.Вы можете использовать CFStreamCreatePairWithSocketToHost или CFStreamCreatePairWithSocketToCFHost , чтобы открыть сокет, подключенный к данному хосту и порту, и связать с ним пару объектов CFStream .

    Вы также можете использовать функцию CFStreamCreatePairWithSocketToNetService для подключения к службе Bonjour. Прочтите Обнаружение и Рекламу сетевых услуг в Обзор сети для получения дополнительной информации.

  • Используйте вызовы POSIX, если требуется кроссплатформенная переносимость.

    Если вы пишете сетевой код, который работает исключительно в OS X и iOS, вам обычно следует избегать сетевых вызовов POSIX, потому что с ними труднее работать, чем с API более высокого уровня. Однако, если вы пишете сетевой код, который должен использоваться совместно с другими платформами, вы можете использовать сетевые API POSIX, чтобы вы могли использовать один и тот же код везде.

    Никогда не используйте синхронные сетевые API POSIX в основном потоке приложения с графическим интерфейсом. Если вы используете синхронные сетевые вызовы в приложении с графическим интерфейсом, вы должны делать это в отдельном потоке.

    Примечание. Сеть POSIX не активирует сотовую радиосвязь на iOS. По этой причине использование сетевого API POSIX в iOS обычно не рекомендуется.

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

Чтобы узнать больше об API сокетов POSIX, прочтите FAQ по UNIX Socket на http://developerweb.net/.

Установление соединения

Как правило, для установления TCP-соединения с удаленным хостом рекомендуется использовать потоки.Потоки автоматически решают многие проблемы, возникающие при TCP-соединениях. Например, потоки предоставляют возможность подключения по имени хоста, а в iOS они автоматически активируют сотовый модем устройства или VPN по запросу, когда это необходимо (в отличие от CFSocket или сокетов BSD). Потоки также являются более похожим на Какао сетевым интерфейсом, чем протоколы более низкого уровня, и ведут себя в значительной степени совместимым с API потокового файла Какао.

Способ получения входных и выходных потоков для хоста зависит от того, использовали ли вы обнаружение служб для обнаружения хоста:

После получения входных и выходных потоков, вы должны немедленно сохранить их, если вы не используете автоматический подсчет ссылок .Затем приведите их к объектам NSInputStream и NSOutputStream , установите их объекты-делегаты (которые должны соответствовать протоколу NSStreamDelegate ), запланируйте их в текущем цикле выполнения и вызовите их методы open .

Примечание: Если вы работаете с более чем одним подключением одновременно, вы также должны отслеживать, какой входной поток связан с данным выходным потоком и наоборот. Самый простой способ сделать это - создать собственный объект подключения, содержащий ссылки на оба потока, а затем установить этот объект в качестве делегата для каждого потока.

Обработка событий

Когда метод stream: handleEvent: вызывается для делегата объекта NSOutputStream , а значение параметра streamEvent равно NSStreamEventHasSpaceAvailable , вызовите write: maxLength: data: send. Этот метод возвращает количество записанных байтов или отрицательное число в случае ошибки. Если было записано меньше байтов, чем вы пытались отправить, вы должны поставить в очередь оставшиеся данные и отправить их после повторного вызова метода делегата с событием NSStreamEventHasSpaceAvailable .В случае возникновения ошибки следует позвонить по номеру streamError , чтобы выяснить, что пошло не так.

Когда метод stream: handleEvent: вызывается в вашем NSIn

.

Смотрите также