Как последовательно соединить розетки


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

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

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

Для этого нужно всего лишь выяснить, как производится параллельное и последовательное подключение розеток для домашней техники, в каких случаях применяются схемы «шлейфом» и «звездой». С этой весьма полезной информацией ознакомит предложенная нами статья.

Содержание статьи:

Способы подключения розеток

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

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

Преобладающее большинство технических устройств, нуждающихся в подключении к электроснабжению, расположено или приурочено к кухне и ванной комнате:

Галерея изображений

Фото из

Кухня - помещение, в котором используются электроприборы, подключаемые как к отдельным, так и к общим силовым линиям

Электрооборудованием, различающимся по мощности, оснащаются ванные комнаты и совмещенные санузлы

Если в последовательно подключенную цепь розеток подключить мощный прибор совместно с другими, электропроводка и розетка перегорит

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

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

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

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

Электрические чайники, тостеры, миксеры, кофемолки, хлебопечки работают от розеток, подключенных последовательно - шлейфом

Кухня - место установки мощных потребителей

Электрооборудование в ванных и санузлах

Перегорание розетки от превышения нагрузки

Подключение розеток шлейфом

Фен как прибор для питания от шлейфовой розетки

Отдельная силовая линия для стиральной машины

Шлейфовая схема установки розеток на кухне

Маломощные кухонные потребители шлейфовых линий

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

При необходимости подключения каждого такого потребителя запитываемая точка должна выдерживать номинальный ток в 16 – 32А. На ток с таким же показателем рассчитан и стоящий на входе .

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

Розетки с отдельными линиями – единственно верный вариант для обслуживания мощных бытовых приборов типа стиральной машинки или электроплиты

Способ предполагает соединение всех элементов к общей питающей линии электропроводки.

Чтобы свести на «нет» риск выведения из строя сразу нескольких точек, мастера рекомендуют в одну систему включать не более двух-трех розеток. Этот момент четко прописан в СП 31-110-2003: подключать шлейфом допускается до трех дополнительных электроприемников.

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

Единственное условие – чтобы суммарная нагрузка по току не превышала в два раза значение рабочего номинального тока первого (головного) электроприемника.

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

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

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

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

Независимо от типа выбранного способа электропроводку можно выполнять в одном из двух вариантов:

  • открытый – предполагает прокладку проводов на поверхности стены;
  • закрытый – предполагает выдалбливание каналов для прокладки силовых линий в бетонных и кирпичных стенках, выборку канала в древесине для прокладки кабеля, затянутого в гофротрубу.

Открытый вариант удобнее и проще относительно не только монтажа, но и обслуживания и контроля. Но относительно эстетического аспекта открытый провод не всегда уместен. Да и к тому же «съедает» часть полезной площади: сверху кабеля невозможно повесить полку или придвинуть вплотную к стене мебель.

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

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

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

Чтобы минимизировать необходимость «раскурочивания» стен для создания штроб, закрытую проводку выполняют на этапе строительных или ремонтных работ до момента выполнения отделки

Но «невидимость» закрытой проводки способна сыграть и злую шутку при попытке «забить гвоздь». Поэтому существует негласное правило: провода прокладывать относительно розеток строго вертикально или горизонтально.

Особенности монтажа шлейфового подключения

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

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

К примеру, мы знаем, что номинальный ток на одну розетку не должен превышать 16А. Если к одной точке подключить такую нагрузку, то ничего страшного не случится. Но при включении такой нагрузки хотя бы на 2-3 розетки одной линии ее суммарные показания возрастут, как следствие – питающий кабель может не выдержать.

Ключевым условием шлейфового подключения является то, что сечение проводников перемычек будет соответствовать проводникам основной питающей линии

Согласно ПУЭ при шлейфовом соединении не допускается разрывать РЕ проводник защитного заземляющего провода. Его контур в любом случае должен оставаться неразрывным.

Снизить материальные затраты при подведении РЕ проводника к розеткам помогает применение одного из технических решений:

Монтаж с использованием соединителей

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

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

Все жилы проводника: синяя для нулевого «нулевого», красно-коричневая для «фазного» и желто-зеленая для «заземления» – подключаются параллельно

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

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

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

Для достижения желаемого эффекта клеммам придают формы, которые позволяют увеличить площадь самих контактов, а также силу их сжатия. Сегодня для монтажа защитного нуля часто используют соединители типа «Scotchlok». Клипсовый соединитель этого типа оснащен врезными контактами.

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

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

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

Согласно ПУЭ п.1.7.144 для подключения открытой проводящей части устройства к нулевому или заземляющему проводнику, необходимо производить ответвление в полости предназначенных для этой цели корпусов электроустановочных изделий. К числу таковых относятся и розетки.

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

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

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

Установка дополнительной распределительной коробки

Этот способ предполагает установку рядом со шлейфом розеток скоммутированной со щитком ответвительной коробки либо же соединительной колодки. При этом кабель разветвляется в распределительной коробке на участке до подведения к подрозетнику.

Применение дополнительной ответвительной коробки для РЕ-проводников также позволяет провести подключение заземляющий контактов параллельно при разводке розеток шлейфом

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

Планируя в дальнейшем от распределительной коробки делать новые подключения, на этапе монтажа стоит оставить запас кабеля длиной в 15-20 см

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

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

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

Главным отличием накладной рамки от розеточного блока является то, что каждый элемент в ней собирается в последовательный шлейф от одного к другому

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

Специфика параллельного подключения

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

Третье вполне обоснованное название “бескоробочная”, т.к. предполагает возможность отказа от распаечной коробки. Способ активно практикуется в странах Европы, а у нас применяется для обеспечения отдельной линией мощных потребителей чаще всего в комплексе с шлейфовой технологией.

Один из вариантов параллельной схемы демонстрирует подборка фото:

Галерея изображений

Фото из

Шаг 1: Скрытая прокладка кабеля по параллельной схеме

Шаг 2: Подготовка спаренного подрозетника к установке

Шаг 3: Крепление подрозетников в подготовленной стене

Шаг 4: Выравнивание стены вокруг установленных подрозетников

Шаг 5: Удаление общей изоляции кабеля

Шаг 6: Удаление изоляции с ноля, фазы и земли

Шаг 7: Параллельная установка розеток

Шаг 8: Установка и фиксация общей лицевой панели

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

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

Для большей надежности они должны располагать небольшим запасом по току. Это позволит компенсировать фактическое отклонение от указанного производителем диаметра от их номинального значения, чем часто «грешат» представленные на современном рынке изделия. К тому же такое решение обеспечит возможность работы оборудования в режиме перегрузки.

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

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

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

Предназначение провода проще всего определить по цвету изоляции:

  • «фаза» – провода с белым оттенком;
  • «нуль» – изоляция окрашена в синий цвет;
  • «заземление» – оплетка желто-зеленого цвета.

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

Для соединения проводов и подключения к розетке первым делом укорачивают их концы. Применение бокорезов позволит максимально аккуратно выполнить работу. Конец каждого провода на 15-20 мм зачищают от внешней изоляции с помощью острого ножа.

Соединение проводов выполняют в такой последовательности:

  1. С розетки снимают пластиковую защитную крышку.
  2. Зажимные винты откручивают на 5-6 мм. Те же манипуляции проделывают с винтом и на клемме заземления.
  3. Зачищенные концы проводов поочередно заводят в коробку с учетом положения вводных клемм и укладывают в соответствующие гнезда.
  4. Гнезда с уложенными проводами плотно затягивают винтами.
  5. Подрозетник с подключенными проводами вставляют в стеновую нишу и фиксируют боковыми зажимами.

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

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

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

При все преимущества схемы сохраняются. Единственное – процесс подключения отнимает чуть больше времени и сил.

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

Выводы и полезное видео по теме

Видео #1. Руководство по применению шлейфового способа:

Видео #2. Подробное ознакомление с одним из безопасных вариантов подключения розеток:

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

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

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

Примеры кодов сокетов

| Документы Microsoft

  • 2 минуты на чтение

В этой статье

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

В этом разделе

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

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

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

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

Sockets
Предоставляет основную информацию о пространстве имен System.Net.Sockets и классе Socket.

Безопасность в сетевом программировании
Описывает, как использовать стандартные методы безопасности и аутентификации в Интернете.

.

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

В этой статье объясняется, как работать с сокетами и потоками сокетов на различных уровнях, от 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: вызывается в делегате объекта NSInputStream и значение параметра streamEvent равно NSStreamEventHasBytesAvailable , ваш входной поток получил данные, которые вы можете прочитать с помощью : 9000engthread: max8L метод. Этот метод возвращает количество прочитанных байтов или отрицательное число в случае ошибки.

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

Если другой конец соединения закрывает соединение:

  • Вызывается метод stream: handleEvent: вашего делегата соединения с streamEvent , установленным на NSStreamEventHasBytesAvailable . Когда вы читаете из этого потока, вы получаете нулевую длину ( 0 ).

  • Вызывается метод stream: handleEvent: вашего делегата соединения с streamEvent , установленным на NSStreamEventEndEncountered .

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

Закрытие соединения

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

Для получения дополнительной информации

Чтобы узнать больше, прочтите Настройка потоков сокетов в Руководстве по программированию потоков , Использование NSStreams для TCP-соединения без NSHost или см. проекты примеров кода SimpleNetworkStreams и RemoteCurrency .

Создание сервера на основе TCP

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

API, который следует выбрать для своего сервера, зависит в первую очередь от того, пытаетесь ли вы поделиться кодом с другими платформами (не Mac и iOS). Есть только два API, которые обеспечивают возможность прослушивания входящих сетевых подключений: API сокетов Core Foundation и API сокетов POSIX (BSD).API более высокого уровня нельзя использовать для приема входящих подключений.

  • Если вы пишете код исключительно для OS X и iOS, используйте сетевые вызовы POSIX для настройки сетевых сокетов. Затем используйте GCD или CFSocket для интеграции сокетов в цикл выполнения.

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

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

  • Никогда не используйте NSSocketPort или NSFileHandle для общей связи через сокеты. Дополнительные сведения см. В разделе «Не использовать NSSocketPort (OS X)» или «NSFileHandle для общей связи через сокеты» в Networking Overview .

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

Прослушивание с помощью Core Foundation

Чтобы использовать API Core Foundation для прослушивания входящих подключений, необходимо сделать следующее:

  1. Добавьте соответствующие include:

     #include  
     #include  
     #include  
.Программирование сокетов

на Python (Руководство) - Real Python

Сокеты и API сокетов используются для отправки сообщений по сети. Они обеспечивают форму межпроцессного взаимодействия (IPC). Сеть может быть логической локальной сетью для компьютера или сетью, физически подключенной к внешней сети, с собственными подключениями к другим сетям. Очевидным примером является Интернет, к которому вы подключаетесь через своего провайдера.

В этом руководстве есть три различных итерации построения сервера и клиента сокетов с помощью Python:

  1. Мы начнем обучение с рассмотрения простого сервера и клиента сокета.
  2. После того, как вы познакомились с API и принципами работы в этом начальном примере, мы рассмотрим улучшенную версию, которая обрабатывает несколько подключений одновременно.
  3. Наконец, мы перейдем к созданию примера сервера и клиента, которые функционируют как полноценное приложение для сокетов, со своим собственным настраиваемым заголовком и содержимым.

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

Примеры в этом руководстве используют Python 3.6. Вы можете найти исходный код на GitHub.

Сети и розетки - большие предметы. О них написаны буквально тома. Если вы новичок в сокетах или сетях, это совершенно нормально, если вы чувствуете себя перегруженным всеми терминами и частями. Я знаю, что сделал!

Но не расстраивайтесь.Я написал для вас это руководство. Как и в случае с Python, мы можем учиться понемногу за раз. Воспользуйтесь функцией закладок в браузере и вернитесь, когда будете готовы к следующему разделу.

Приступим!

Фон

Розетки имеют долгую историю. Их использование началось с ARPANET в 1971 году, а позже стало API в операционной системе Berkeley Software Distribution (BSD), выпущенной в 1983 году, под названием Berkeley Sockets.

Когда в 1990-х годах появился Интернет, вместе с World Wide Web росло и сетевое программирование.Веб-серверы и браузеры были не единственными приложениями, использующими преимущества новых подключенных сетей и сокетов. Широкое распространение получили клиент-серверные приложения всех типов и размеров.

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

Наиболее распространенным типом приложений сокетов являются приложения клиент-сервер, в которых одна сторона выступает в роли сервера и ожидает соединений от клиентов.Это тип приложения, о котором я расскажу в этом руководстве. В частности, мы рассмотрим API сокетов для Интернет-сокетов, иногда называемых сокетами Беркли или BSD. Существуют также доменные сокеты Unix, которые могут использоваться только для связи между процессами на одном и том же хосте.

Обзор API сокетов

Модуль сокетов

Python обеспечивает интерфейс с

.HOWTO по программированию сокетов

- документация Python 3.9.0

Автор

Гордон Макмиллан

Аннотация

Розетки используются почти везде, но являются одними из самых неправильно понятые технологии вокруг. Это обзор розеток на 10 000 футов. На самом деле это не учебник - вам еще нужно поработать, чтобы что-то получить оперативный. Он не касается тонких моментов (а их очень много), но Я надеюсь, что это даст вам достаточно знаний, чтобы начать их прилично использовать.

Розетки

Я буду говорить только о сокетах INET (то есть IPv4), но они составляют не менее 99% используемые розетки. И я буду говорить только о сокетах STREAM (т. Е. TCP) - если только вы знать, что вы делаете (в этом случае этот HOWTO не для вас!), вы получите лучшее поведение и производительность от сокета STREAM, чем что-либо еще. Я буду попытаться раскрыть тайну того, что такое сокет, а также дать несколько советов о том, как работа с блокирующими и неблокирующими розетками.Но я начну с разговора о блокировка розеток. Вам нужно знать, как они работают, прежде чем начинать неблокирующие розетки.

Отчасти проблема с пониманием этих вещей состоит в том, что «сокет» может означать количество неуловимо разных вещей, в зависимости от контекста. Итак, сначала давайте сделаем различие между «клиентским» сокетом - конечной точкой разговора и «Серверная» розетка, которая больше похожа на операторский коммутатор. Клиент приложение (например, ваш браузер) использует исключительно «клиентские» сокеты; в веб-сервер, с которым он разговаривает, использует как «серверные», так и «клиентские» сокеты.

История

Из различных форм МПК , розетки, безусловно, самые популярные. На любой платформе есть вероятно, будут другие формы IPC, которые быстрее, но для кроссплатформенное общение, сокеты - это почти единственная игра в городе.

Они были изобретены в Беркли как часть разновидности BSD Unix. Они распространяются как лесной пожар с Интернетом. Не зря - комбинация розеток. с INET невероятно легко общаться с произвольными машинами по всему миру (по крайней мере, по сравнению с другими схемами).

Создание сокета

Грубо говоря, когда вы нажимали на ссылку, которая привела вас на эту страницу, ваш браузер сделал что-то вроде следующего:

 # создать INET, STREAMing сокет s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # теперь подключаемся к веб-серверу через порт 80 - обычный http порт s.connect (("www.python.org", 80)) 

Когда подключение завершается, сокет s может использоваться для отправки в запросе текста страницы.Тот же сокет будет читать ответить, а затем быть уничтоженным. Правильно, уничтожено. Клиентские сокеты обычно используются только для одного обмена (или небольшого набора последовательных обмены).

То, что происходит на веб-сервере, немного сложнее. Во-первых, веб-сервер создает «серверный сокет»:

 # создать INET, STREAMing сокет serversocket = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # привязываем сокет к общедоступному хосту и известному порту serversocket.bind ((socket.gethostname (), 80)) # стать серверным сокетом серверный сокет.слушать (5) 

Следует отметить пару моментов: мы использовали socket.gethostname () , чтобы сокет будет видно внешнему миру. Если бы мы использовали s.bind (('localhost', 80)) или s.bind (('127.0.0.1', 80)) у нас все равно будет сокет «сервер», но тот, который был виден только внутри той же машины. s.bind (('', 80)) указывает, что сокет доступен по любому адресу, с которым встречается машина имеют.

Второе замечание: порты с небольшим номером обычно зарезервированы для «хорошо известных» сервисы (HTTP, SNMP и т. д.).Если вы играете, используйте хорошее большое число (4 цифры).

Наконец, аргумент listen сообщает библиотеке сокетов, что мы хотим, чтобы поставьте в очередь до 5 запросов на соединение (нормальный максимум), прежде чем отказывать извне соединения. Если остальная часть кода написана правильно, этого должно быть достаточно.

Теперь, когда у нас есть «серверный» сокет, прослушивающий порт 80, мы можем ввести основной цикл веб-сервера:

, пока True: # принимать подключения извне (клиентский сокет, адрес) = серверный сокет.accept () # теперь что-нибудь сделаем с клиентским сокетом # в данном случае мы представим, что это многопоточный сервер ct = client_thread (клиентский сокет) ct.run () 

На самом деле существует 3 основных способа работы этого цикла - отправка поток для обработки clientocket , создайте новый процесс для обработки clientocket , или реструктурируйте это приложение для использования неблокирующих сокетов, и мультиплексирование между нашим «серверным» сокетом и любым активным клиентским сокетом с использованием выберите .Подробнее об этом позже. Сейчас важно понять, это: это все «серверный» сокет. Он не отправляет никаких данных. Это не получать любые данные. Он просто производит «клиентские» сокеты. Каждому клиентскому сокету соответствует создается в ответ на , другой «клиентский» сокет, выполняющий connect () с хост и порт, к которым мы привязаны. Как только мы создали этот клиентский сокет , мы вернитесь к прослушиванию для получения дополнительных подключений. Два «клиента» могут свободно общаться в чате. вверх - они используют какой-то динамически выделенный порт, который будет переработан, когда разговор заканчивается.

МПК

Если вам нужен быстрый IPC между двумя процессами на одной машине, вам следует изучить каналы или разделяемая память. Если вы решили использовать сокеты AF_INET, привяжите Сокет «server» на «localhost» . На большинстве платформ это займет сократить несколько слоев сетевого кода и работать немного быстрее.

См. Также

Многопроцессорная модель интегрирует межплатформенные IPC в более высокий уровень API.

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

Первое, на что следует обратить внимание, это то, что «клиентский» сокет веб-браузера и Интернет серверные «клиентские» сокеты такие же звери.То есть это «одноранговый» разговор. Или, другими словами, в качестве дизайнера вам придется решить, каковы правила этикета для разговора . Обычно connect ing socket начинает диалог, отправляя запрос, или возможно знак. Но это дизайнерское решение, а не розетки.

Теперь есть два набора глаголов, которые можно использовать для общения. Вы можете использовать отправить и recv , или вы можете превратить свой клиентский сокет в файлового зверя и используйте для чтения и для записи .Именно так Java представляет свои сокеты. Я не собираюсь здесь говорить об этом, но хочу предупредить, что вам нужно использовать заподлицо на розетки. Это буферизованные «файлы», и распространенной ошибкой является напишите что-нибудь, а затем прочтите для ответа. Без промывки дюймов там вы можете ждать ответа вечно, потому что запрос все еще может быть в ваш выходной буфер.

Теперь мы подошли к главному камню преткновения розеток - send и recv работают. в сетевых буферах.Они не обязательно обрабатывают все передаваемые вами байты их (или ожидайте от них), потому что их основное внимание уделяется работе с сетью буферы. Как правило, они возвращаются, когда связанные сетевые буферы были заполнены ( отправить ) или опустошены ( recv ). Затем они сообщают вам, сколько байтов они обработано. - это ваша ответственность - позвонить им еще раз, пока ваше сообщение не будет полностью разобрались.

Когда recv возвращает 0 байтов, это означает, что другая сторона закрыта (или находится в процесс закрытия) соединение.Вы больше не получите данных о это соединение. Когда-либо. Возможно, вы сможете успешно отправить данные; Я поговорю подробнее об этом позже.

Протокол, подобный HTTP, использует сокет только для одной передачи. Клиент отправляет запрос, затем читает ответ. Это оно. Сокет отбрасывается. Это значит, что клиент может определить конец ответа, получив 0 байтов.

Но если вы планируете повторно использовать розетку для дальнейших передач, вам необходимо что нет EOT на розетке. Повторюсь: если розетка отправить или recv возвращается после обработки 0 байтов, соединение было сломан. Если соединение , а не разорвано, вы можете подождать recv навсегда, потому что сокет , а не скажет вам, что больше нечего читать (пока). Если вы немного подумаете об этом, то поймете, что фундаментальная истина сокетов: сообщения должны иметь фиксированную длину (фу), или быть разделенными (пожать плечами), или указать длину (намного лучше), или заканчиваться отключение соединения .Выбор полностью за вами, но некоторые способы правее других).

Если вы не хотите разрывать соединение, самым простым решением является фиксированный длина сообщения:

 класс MySocket: "" "только демонстрационный класс - закодировано для ясности, а не эффективности "" " def __init __ (self, sock = None): если носок None: self.sock = socket.socket ( сокет.AF_IN 
.

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