Розетка подключение: Как подключить розетку своими руками

Содержание

Как подключить розетку своими руками

Умеете ли вы правильно заботиться о собственном доме? Конечно, в понятие заботы входит и создание уютной атмосферы, и наведение чистоты, и поддержание бытовых удобств в работоспособном состоянии. И последнее — одна из главных составляющих комфорта. Если в доме протекают краны или искрят розетки, жить в нем как-то не очень удобно, а в некоторых случаях даже опасно. Давайте сейчас рассмотрим самое простое — подключение розетки без замены электропроводки. Дело это по плечу любому человеку, умеющему держать в руках отвертку.

 

 

  1. Типы розеток, используемых в жилых помещениях
  2. Монтаж розеток своими руками

 

Типы розеток, используемых в жилых помещениях

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

Казалось бы, схема розетки достаточна проста. Но технический прогресс не стоит на месте и современные розетки не так уж и похожи на те, которые использовались во времена наших родителей. А при замене розетки все-таки стоит знать устройство и старых, и новых устройств.

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

Систематика розеток по их конструкции

Рассмотрим сначала конструктивное деление розеток на типы:

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

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

 

Группировка розеток по их назначению

Теперь рассмотрим разделение розеток на типы по назначению:

  • розетка с заземлением — с выводом на корпус розетки заземляющих контактов, подсоединенных с заземляющим проводником (предназначена для защиты от пробивающего тока, выходящего на корпус электроприбора)
  • закрытая розетка — в этих розетках гнездо для вилки закрыто поднимающейся сплошной панелью или сами отверстия прикрыты шторками, отодвигающимися только при одновременном введении металлических контактов вилки (устанавливается для защиты маленьких детей, которые могут попробовать засунуть в розетку какой-нибудь гвоздь или просто палец)
  • розетка с программируемым включением/отключением — в конструкцию такой розетки входит программируемый таймер, с помощью которого можно задать четкие временные рамки работы подключенного электроприбора
  • розетка с выталкивателем вилки — с помощью кнопки, входящей в конструкцию розетки, можно просто вытолкнуть вилку электроприбора (такая розетка помогает более долгое время сохранять вилку в работоспособном состоянии)
  • уличная розетка — розетка с повышенными защитными свойствами, позволяющими сохранять работоспособность розетки в любых погодных условиях (степень защиты от IP55 — от пыли и сильных водяных струй), имеет дополнительную крышку, закрывающую гнездо для вилки
  • розетка для ванной — с повышенной защитой от проникновения влаги (маркировка от IP44)

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

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

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

 

Стиль и дизайн розеток

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

 

Монтаж розеток своими руками

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

Схема замены розетки

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

  • отключить электропитание на щитке (выключить автомат или вывернуть пробки) и, для тех, кто любит абсолютную надежность, одеть резиновые перчатки
  • проверить отсутствие тока в розетке — индикатором или любым электроприбором, например, феном или настольной лампой
  • снять старую розетку (отвинтить верхнюю крышку с гнездом, ослабить монтажные лапки, вынуть старую рабочую часть, отсоединить провода)
  • почистить подрозетник, если он есть (при отсутствии подрозетника можно даже установить новый, зафиксировав его гипсом или алебастром) и вытащить все провода для наиболее удобного доступа к ним
  • подготовить провода к подсоединению (обрезать до нужной длины — где-то на ширину ладони, снять общую оплетку, зачистить концы проводов примерно на 1-1,5 см, при необходимости — пропаять)
  • подсоединить провода к рабочей части новой розетки
  • аккуратно подогнуть провода, вставить в подрозетник рабочую часть розетки, прикрепить ее винтами к подрозетнику или просто отрегулировать монтажные лапки, чтобы рабочая часть сидела в подрозетнике крепко и ровно
  • установить декоративную рамку
  • привинтить верхнюю крышку новой розетки
  • включить электричество

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

Некоторые нюансы подключения проводов

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

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

  • фаза — провод обычно имеет белый, красный или коричневый цвет изоляции
  • ноль — синий (голубой) или черный цвет изоляции
  • земля — желто-зеленый, или желтый, или зеленый цвет изоляции

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

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

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

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

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

Про одинарную розетку уже все понятно, теперь стоит обрисовать установку двойной розетки.

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

А вот подключение собранных розеток чуть более сложное. Для него нужен кусок кабеля, соответствующий тому, который подсоединен к основному подрозетнику. То есть если в подрозетнике, куда сделан вывод проводки общей сети, три провода (питающие и заземление), то и дополнительных проводов тоже должно быть три. Эти дополнительные провода протягиваются между подрозетниками, и в первом подрозетнике (где уже есть выход основного кабеля) к зажимам клемм подключается по 2 провода — от основного кабеля и от дополнительного, во втором же подрозетнике подсоединение проводов проводится стандартно. Более подробно этот процесс показан на видео.

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

самостоятельная установка розетки с заземлением

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

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

 

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

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

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

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

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

 

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

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

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

 

 

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

Если одной розетки недостаточно, используйте двойную. При подключении розетки с заземлением необходимо помнить, что к гнезду должны обязательно подходить провода ноль и фаза. Ноль всегда находится слева, фаза справа, кабель заземления по центру. Кроме того, провода различают по цветам: фаза 1 – коричневый или красный кабель, фаза 2 – черный, фаза 3 – серый, ноль – синий, заземление – желто-зеленый.  

Монтаж тройной розетки производится по принципу двойной.

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

 

Как проверить работу розетки с заземлением

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

Если работы по подключению розеток вызывают затруднения, можно заказать услуги специалистов сервиса Юду. Вызов оформляется через сайт youdo.com быстро, абсолютно бесплатно, а мастера работают профессионально и недорого.

Посмотреть видео о том, как установить розетку с заземлением, можно здесь.

виды монтажа и способы установки

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

Виды телефонных розеток

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

  1. 6P2C — этот вид телефонного разъёма, является самым распространённым. 6P2C полностью соответствует стандарту RJ11, по которому подключается большинство современных телефонов.
  2. 6P4C — этот стандарт разъёма отличается от 6P2C, дополнительной парой контактов. Этот вид разъёма, позволяет подключить два аналоговых аппарата или один цифровой телефон. К таким элементам арматуры могут быть подключены аппараты, имеющие стандарт подключения 6P2C. В этом случае, 2 контакта в разъёме останутся незадействованные.
  3. 6P6C — этот стандарт используется для подключения 3 линий или цифровых устройств. Он так же соответствует стандарту RJ11К разъёму этого вида можно подключаться телефонным аппаратам с кабелем стандарта 6P4C и 6P2C.
  4. РТШК-4 — устаревший стандарт, который по сей день используется для подключения телефонов старых моделей.

Подключение розетки

Для установки понадобятся следующие инструменты:

  • Электрическая дрель.
  • Отвёртка.
  • Нож.
  • Коронная насадка для подрозетников.
  • Зубило.
  • Молоток.

Вооружившись этими инструментами можно без труда установить телефонную розетку, как внутренней, так и наружной конструкции. Какой инструмент необходим для проведения работ обязательно ознакомьтесь в статье Собираем сумку электромонтажника.

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

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

Установка телефонной розетки

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

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

Когда раствор застынет, на розетку устанавливается декоративная пластмассовая накладка.

Открытая установка

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

Открытая установка осуществляется в такой последовательности:

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

Если телефон будет работать в стандартном режиме, то монтаж телефонной розетки можно считать завершённым. Как подключить телефонную розетку видео смотрите ниже:

 Установка телефонной розетки фирмы Legrand

Продукция французской фирмы «Легранд», является наиболее качественной среди аналогичных элементов телефонной арматуры представленной на рынке. К некоторым видам розеток этой фирмы можно присоединить 2 телефонных аппаратов.  Особенностью изделий фирмы «Легранд», являются специальные зажимы, которые позволяют подсоединять к розетке провода, предварительно их не зачищая от изоляционного слоя. Соединение металлических проводников происходит за счёт специальных ножей, которые установлены в зажимах розеток. Ножи срезают защитный слой изоляции, во время затягивания специальных зажимов. Использование розеток Legrand позволяет сократить время на установку арматуры, а качество используемых для производства изделий этой фирмы материалов, позволит безупречно работать  домашней телефонной системе в течение длительного времени.

Заключение

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

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

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

Розетка электрическая – как подключить, перенести, отремонтировать

Розетка электрическая – это электротехническое устройство, предназначенное для оперативного подключения и отключения электрических приборов к электрической сети.

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

Разновидности электрических розеток

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

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

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

Типы и нагрузочная способность


электрических розеток

В настоящее время в России применяются розетки, соответствующие требованиям ГОСТ 7396.1-89 (МЭК 83-75) типа C5 и C6. На корпусе каждой розетки нанесена маркировка, в которой указаны ее технические характеристики – величина максимально допустимого тока и допустимое напряжение питающей сети.

Розетки типа C5 (советские розетки) имеет два круглых гнезда, рассчитанные на подключение вилок со штырями диаметром 4 мм и длиной 19 мм, расположенных на расстоянии 19 мм и предназначена для подключения электроприборов, корпус которых не требуется заземлять, например, фен, миксер и рассчитаны на ток до 6 А. Такие розетки предназначены для установки только в жилых помещениях.

Розетки типа С6 (евророзетка), рассчитана на ток до 16 А, имеют два круглых гнезда для подключения вилок со штырями диаметром 4 и 4,8 мм и длиной 19 мм, расположенных на расстоянии 19 мм. В отличии от розетки С5, дополнительно имеет ленточный контакт для подключения заземляющего проводника желто- зеленого цвета. Розетка заимствована из немецкого стандарта CEE 7/4 и называется Шуко.

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

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

Обозначение и схема подключения к электропроводке


электрической розетки

Какую мощность


может выдержать электрическая розетка

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

Проверку мощности электрической розетки нужно проводить в два этапа. На первом этапе внешним осмотром можно определить допустимую мощность розетки по внешнему виду. Обычно простые розетки советского производства под штыри диаметром 4 мм типа С5 рассчитаны на подключение электроприборов мощностью до 1,3 кВт. Если установлена евро розетка типа С6, то к ней можно подключать приборы мощностью до 3,5 кВт. Но не только от технических характеристик розетки зависит допустимая мощность подключаемого прибора.

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

Таким образом, мощность, которую выдержит конкретная электрическая розетка, зависит не только от ее технических характеристик, но и от сечения проводов, с помощью которых розетка подключена к электросети. Например, если евро розетка С6, которая может выдержать нагрузку 3,5 кВт, подключена к электросети проводом сечением 1,0 мм2, то допустимая мощность, которую может выдержать розетка составит всего 1,2 кВт. Полностью нагрузочная способность евророзетки будет реализована при сечении проводов 2,7 мм2 и более.

Устройство электрических розеток

Как выяснено выше, розетки бывают двух видов, С5 и С6. Рассмотрим более подробно, в чем же их отличие.

Устройство электрической розетки С5

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

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

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

От этого недостатка освобождена конструкция розетки, приведенной ниже. В корпусе дополнительно установлена стальная пружина, прижимающая прямоугольную латунную пластину к тонкостенной. В результате пружинящие свойства контакта со временем не меняются. Она универсальная и в нее можно вставлять вилки с диаметром штырей как 4мм (рассчитанные на ток до 6 А), так и 4,8 мм (рассчитанные на ток до 16 А).

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

Устройство электрической розетки С6

Розетка типа С6 по конструкции практически не отличается от розетки С5, за исключением одного, наличия дополнительного плоского контакта для подключения желто- зеленого цвета заземляющего провода.

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

На фото также видно, как нужно подсоединять провода к розетке для случая параллельного подключения розеток. Если заменяется розетка С5 на С6 в квартире с электропроводкой, в которой нет заземляющего провода, то заземляющий контакт розетки С6 оставляется не подключенным.

Устройство удлинителя типа Пилот

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

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

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

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

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

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

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

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

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

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

Вот так должно быть выполнено идеальное резьбовое соединение проводов с контактами розетки.

Установка розетки скрытой проводки

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

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

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

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

Как перенести розетку на другое место стены

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

Пример переноса розетки на другое место стены

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

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

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

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

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

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

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

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

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

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

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

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

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

Розетка перенесена на новое место и теперь ничего не мешает продолжить ремонт этого участка стены.

Ремонт розеток

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

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

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

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

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

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

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

Розетка не подключается или работает с ошибками – Умный дом Sber

Выберите тему:

Моя розетка не включается
Индикатор мигает, но розетка не подключается
Индикатор мигает, но медленно
В приложении Салют показывается неверный статус розетки
Розетка не реагирует на команды
Вернуть заводские настройки
Другая проблема

Моя розетка не включается

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

  • Убедитесь, что умная розетка до конца вставлена в стационарную розетку или удлинитель.

Индикатор мигает, но розетка не подключается

  • Проверьте, работает ли интернет: подключите компьютер или телефон к той же сети Wi-Fi, к которой подключаете розетку, и попробуйте открыть сайт sberdevices.ru.
  • Поставьте розетку и устройство, с помощью которого вы её настраиваете, ближе друг к другу. Лучше всего — на расстояние одного или двух метров. Это нужно только на время на время настройки, после устройства можно размещать на расстоянии.

  • Перезагрузите роутер.

  • Попробуйте настроить розетку на другом устройстве с ассистентами Салют или через приложение Салют.

  • Ещё раз попробуйте перевести розетку в режим настройки: нажмите кнопку на корпусе и держите её пять секунд, пока индикатор не замигает.

  • Подключите розетку и устройство, с помощью которого вы её настраиваете, к одной сети Wi-Fi 2,4 ГГц.

  • Настройте роутер:

    • Выключите приоритизацию пакетов данных (Quality of service, QoS).

    • Выключите режим изоляции (Wi-Fi isolation). Так же он может называться гостевым режимом.

    • Переключите сеть Wi-Fi в режим работы 802.11b/g/n.

    • Измените ширину канала Wi-Fi на 20 МГц.

    • Откройте порты 6666/UDP, 6668/TCP, 1883/TCP, 443/TCP, 80/TCP.

    • Разрешите широковещательную рассылку (Broadcast forwarding).

    • Включите службу подключения устройств (Universal plug and play, UPnP).

    • После изменения настроек перезагрузите роутер и попробуйте настроить розетку заново.

Индикатор мигает, но медленно

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

Чтобы вернуть розетку в режим быстрой настройки, отключите её от сети на 10 секунд, затем нажмите кнопку на корпусе розетки и пять секунд держите её — пока индикатор не начнёт быстро мигать.

В приложении Салют показывается неверный статус розетки

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

Это происходит из-за рассинхронизации данных. Попробуйте обновить экран, на которым отображается неверный статус, — для этого проведите пальцем по экрану смартфона сверху вниз (жест pull to refresh). Скорее всего, статус сменится на актуальный.

Розетка не реагирует на команды

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

  • Убедитесь, что на устройстве или в приложении, через которое вы отдаёте команду, вы авторизованы с тем же Сбер ID, с которым настраивали розетку.

  • Выйдите из приложения Салют, выгрузите его из памяти смартфона, а затем запустите заново. Если вы пользуетесь SberBox, SberPortal или другим устройством с ассистентами от Сбера, перезагрузите его.

  • Проверьте, работает ли интернет: подключите компьютер или телефон к той же сети Wi-Fi, к которой подключена розетка, и попробуйте открыть сайт sberdevices.ru.
  • Перезагрузите роутер.

  • Убедитесь, что на роутере выключен режим изоляции (Wi-Fi isolation). Ещё он может называться гостевым режимом.

    Для этого найдите на роутере наклейку с адресом административного интерфейса, логином и паролем. Введите адрес с наклейки в адресную строку браузера и войдите с помощью логина и пароля. Затем найдите и проверьте настройку.

Вернуть заводские настройки

Нажмите кнопку на корпусе розетки и пять секунд держите её — пока индикатор не начнёт быстро мигать.

После этого розетку можно настроить заново.

Другая проблема

Если не работает приложение Салют, у вас проблема со Сбер ID или вы видите ошибку на экране, изучите советы в разделе «Решение проблем». Если ничего не помогает или решения для вашей проблемы не нашлось, свяжитесь с нами — мы поможем.

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

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

Преимущества розеток Legrand

  • Безотказность. Вся продукция Легранд сертифицирована, а производитель гарантирует качество каждого экземпляра. Все розетки проходят ряд проверок ещё на стадии производства, что сводит вероятность заводского брака к минимуму. Но остерегайтесь подделок! В магазине «Электрон» продаются только оригинальные розетки Legrand.
  • Разнообразие дизайнов. Покупатели могут подобрать модель, которая идеально впишется в их интерьер. Всё, что угодно, от стандартного пластика разных цветов до элементов отделки из ценных пород древесины и даже кожи. Разумеется, цены тоже сильно варьируются.
  • Безопасные материалы. Компания Legrand использует только экологически чистые материалы в производстве всей своей продукции.
  • Удобный монтаж. Благодаря особенностям конструкции и современному подходу к производству подключить розетку Легранд своими силами не составляет труда даже для человека, не являющегося экспертом в этой области.
  • Бесперебойная работа. Все металлические части розеток изготовлены из высококачественных сплавов, обеспечивающих стабильно высокое качество передачи электрического тока.

Какие они бывают

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

  • Электрические розетки с винтовыми зажимами несколько менее современны, но всё равно удобны в эксплуатации. Они оборудованы клеммами, между которыми зажимаются провода, и проделать эту операцию очень просто. Применять их можно как с медными, так и с алюминиевыми проводами. Но плотно зажатые алюминиевые провода под воздействием нагрева со временем могут слегка деформироваться в зоне зажима, в результате чего может пропасть контакт. Винтовые зажимы позволяют легко и просто решить эту проблему в два счёта, попросту подкрутив клеммы.
  • Безвинтовые электророзетки стоят несколько дороже, но они оборудованы особыми автоматическими клеммами, имеющими форму загнутого зуба. Особенность их заключается в том, что в случае деформации провода из-за воздействия высокой температуры и давления они автоматически поджимаются, не позволяя контакту пропасть. Установив подобные розетки, Вы избавитесь от необходимости периодически подтягивать клеммы вручную (правила безопасности рекомендуют проделывать эту операцию не реже, чем раз в полгода) раз и навсегда.

Как установить розетку Legrand

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

Особенности установки

В стандартную розетку всегда приходит три провода:

  • Ноль
  • Фаза
  • Заземление

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

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

Установка ТВ розетки Legrand

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

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

Как подключить двойную розетку | Для дома, для семьи

Здравствуйте, уважаемые читатели сайта sesaga.ru. Подключение и установка двойной розетки ни чем не отличается от подключения и установки одинарной. В зависимости от трех или двухпроводной электрической сети (с заземлением или без) розетка подключается трех или двухжильным проводом.

1. Подключение розетки в двухпроводную сеть.

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

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

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

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

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

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

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

Теперь осталось только отсоединить провода с клеммных зажимов старой розетки и приступать к подключению новой.

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

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

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

1. Расположение фазного и нолевого провода в розетке.

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

2. Установка рабочей части розетки.

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

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

3. Длина провода.

Если розетка устанавливается на новую точку, то перед подключением проверьте длину провода, которая должна быть не более 15 – 20 см. Если провод оставить длиннее, то есть вариант, что розетка в подрозетник не поместится.

4. Расположение провода в подрозетнике.

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

2. Подключение розетки в трехпроводную сеть.

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

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

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

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

Теперь надеюсь у Вас не должно возникнуть вопросов с подключением двойной розетки.
Спасибо за внимание. До свидания.
Удачи!

Что такое сокет? (Учебники по 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-адреса.

Межпроцессное взаимодействие в Linux: сокеты и сигналы

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

Розетки

Как трубы бывают двух видов (именованные и безымянные), так и сокеты. Сокеты IPC (также известные как сокеты домена Unix) обеспечивают канальную связь для процессов на одном и том же физическом устройстве ( host ), тогда как сетевые сокеты позволяют использовать этот тип IPC для процессов, которые могут выполняться на разных хостах, тем самым вводя в действие сеть.Сетевые сокеты нуждаются в поддержке базового протокола, такого как TCP (протокол управления передачей) или UDP нижнего уровня (протокол пользовательских дейтаграмм).

Напротив, сокеты IPC полагаются на ядро ​​локальной системы для поддержки связи; в частности, сокеты IPC обмениваются данными, используя локальный файл в качестве адреса сокета. Несмотря на эти различия в реализации, API-интерфейсы сокетов IPC и сетевых сокетов в основном одинаковы. Предстоящий пример охватывает сетевые сокеты, но примеры серверной и клиентской программ могут работать на одном компьютере, поскольку сервер использует сетевой адрес , локальный хост (127.0.0.1), адрес локальной машины на локальной машине.

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

[Загрузить полное руководство по межпроцессному взаимодействию в Linux]

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

Наконец, со временем API сокетов претерпел значительные изменения по мере появления различных усовершенствований POSIX. Текущий пример кода для сервера и клиента преднамеренно прост, но подчеркивает двунаправленный аспект соединения через сокет на основе потока. Вот краткое описание потока управления: сервер запускается в терминале, затем клиент запускается в отдельном терминале:

Пример 1.

Сервер сокетов
 #include  
#include
#include
#include
#include
#include
#include
#include
#include "sock.h"

void report(const char* msg, int terminate) {
  perror(msg);
 если (завершить) exit(-1); /* ошибка */
}

int main() {
  int fd = socket(AF_INET,     /* сеть по сравнению с AF_LOCAL */
                                                       /* система выбирает базовый протокол (TCP) */
  if (fd < 0) report("socket", 1); /* завершить */

  /* привязать локальный адрес сервера к памяти */
  struct sockaddr_in saddr;
  memset(&saddr, 0, sizeof(saddr)); /* очистить байты */
  saddr.sin_family = AF_INET; /* по сравнению с AF_LOCAL */
  saddr.sin_addr.s_addr = htonl(INADDR_ANY); /* порядок байтов от хоста к сети */
  saddr.sin_port = htons(PortNumber); /* для прослушивания */

  if (bind(fd, (struct sockaddr *) &saddr, sizeof(saddr)) < 0)
    report("bind", 1); /* завершение */

  /* прослушивание сокета */
  if (listen(fd, MaxConnects) < 0) /* прослушивание клиентов, вплоть до MaxConnects */
    report("listen", 1); /* завершить */

  fprintf(stderr, "Прослушивание порта %i для клиентов. ..\n", PortNumber);
  /* сервер традиционно слушает бесконечно */
  while (1) {
    struct sockaddr_in caddr; /* адрес клиента */
    int len ​​= sizeof(caddr);  /* длина адреса может change */

    int client_fd = accept(fd, (struct sockaddr*) &caddr, &len);  /* принять блоки */
    if (client_fd < 0) {
      report("accept", 0); /* don' t завершается, несмотря на наличие проблемы
      memset(buffer, '\0', sizeof(buffer));
      int count = read(client_fd, buffer, sizeof(buffer));
      if (count > 0) {
        puts(buffer);
        write(client_fd , buffer, sizeof(buffer)); /* эхо в качестве подтверждения */
      }
    }
    close(client_fd); /* разрыв соединения */
  }  /* while(1) */
  return 0;
}

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

.
  1. socket(…) : получить файловый дескриптор для подключения к сокету
  2. bind(…) : привязать сокет к адресу на хосте сервера
  3. слушать (…) : слушать запросы клиентов
  4. accept(…) : принять конкретный запрос клиента

Полный вызов сокета :

0); /* система выбирает протокол (TCP) */

Первый аргумент указывает сетевой сокет, а не сокет IPC.Существует несколько вариантов второго аргумента, но чаще всего используются SOCK_STREAM и SOCK_DGRAM (дейтаграмма). Сокет на основе потока поддерживает надежный канал, по которому сообщаются потерянные или измененные сообщения; канал является двунаправленным, и полезная нагрузка от одной стороны к другой может быть произвольной по размеру. Напротив, сокет на основе дейтаграмм ненадежен ( best try ), однонаправлен и требует полезной нагрузки фиксированного размера. Третий аргумент сокета определяет протокол.Для используемого здесь потокового сокета есть единственный выбор, который представляет ноль: TCP. Поскольку успешный вызов сокета возвращает знакомый дескриптор файла, сокет записывается и читается с тем же синтаксисом, что и, например, локальный файл.

Вызов bind является наиболее сложным, так как он отражает различные усовершенствования API сокетов. Интересно, что этот вызов привязывает сокет к адресу памяти на сервере. Однако вызов listen прост:

  if (listen(fd, MaxConnects) < 0)  

Первый аргумент — это файловый дескриптор сокета, а второй указывает, сколько клиентских подключений может быть выполнено до того, как сервер выдаст ошибку соединение отклонено при попытке подключения.( MaxConnects имеет значение 8 в файле заголовка sock.h .)

принимает вызов по умолчанию для блокирующего ожидания : сервер ничего не делает, пока клиент не попытается подключиться, а затем продолжит работу. Функция accept возвращает -1 , чтобы указать на ошибку. Если вызов завершается успешно, он возвращает другой файловый дескриптор — для сокета для чтения/записи, в отличие от , принимающего сокет , на который ссылается первый аргумент в вызове accept .Сервер использует сокет чтения/записи для чтения запросов от клиента и записи ответов обратно. Принимающий сокет используется только для приема клиентских подключений.

По замыслу сервер работает бесконечно. Соответственно, сервер можно остановить с помощью Ctrl+C из командной строки.

Пример 2. Клиент сокета

 #include  
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "sock.h"

const char* books[] = {"Война и мир",
                      "Гордость и предубеждение",
                       "Шум и ярость"};

недействительный отчет (const char* msg, целое завершение) {
  perror (msg);
 если (завершить) exit(-1); / * сбой * /
}

INT MAIN () {
/ * FD для сокета * /
int sockfd = socket (af_inet, / * против af_local * /
sock_stream, / * Надежный, двунаправленный * /
0) ; /* система выбирает протокол (TCP) */
  if (sockfd < 0) report("socket", 1); /* завершить */

  /* получить адрес хоста */
  struct hostent* hptr = gethostbyname(Host); /* локальный хост: 127. 0.0.1 */
  if (!hptr) report("gethostbyname", 1); /* hptr NULL? */
  if (hptr->h_addrtype != AF_INET)       /* по сравнению с AF_LOCAL */
    report("bad address family", 1);

  /* подключение к серверу: настроить адрес сервера 1st */
  struct sockaddr_in saddr;
  memset(&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
  saddr.sin_addr.s_addr =
     ((struct in_addr*) hptr->h_addr_list[0])->s_addr;
saddr.sin_port = htons(НомерПорта); /* номер порта в обратном порядке */

  if (connect(sockfd, (struct sockaddr*) &saddr, sizeof(saddr)) < 0)
    report("connect", 1);

  /* Напишите что-нибудь и прочитайте эхо.*/
  puts("Подключение к серверу, собираюсь написать кое-что...");
  между я;
  for (i = 0; i < ConversationLen; i++) {
    if (write(sockfd, books[i], strlen(books[i])) > 0) {
      /* получить подтверждение от сервера и распечатать */
      char buffer[BuffSize + 1];
      memset(buffer, '\0', sizeof(buffer));
      if (read(sockfd, buffer, sizeof(buffer)) > 0)
        puts(buffer);
    }
  }
  puts("Клиент готов, готов выйти. ..");
  close(sockfd); /* закрытие соединения */
  return 0;
}

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

  if (connect(sockfd, (struct sockaddr*) &saddr, sizeof(saddr)) < 0)  

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

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

Сигналы

Сигнал прерывает выполняющуюся программу и в этом смысле связывается с ней.Большинство сигналов могут быть либо проигнорированы (заблокированы), либо обработаны (с помощью назначенного кода), за исключением SIGSTOP (пауза) и SIGKILL (немедленное завершение). Символьные константы, такие как SIGKILL , имеют целые значения, в данном случае 9.

Сигналы могут возникать при взаимодействии с пользователем. Например, пользователь нажимает Ctrl+C из командной строки, чтобы завершить программу, запущенную из командной строки; Ctrl+C генерирует сигнал SIGTERM . SIGTERM для завершить , в отличие от SIGKILL , может быть либо заблокирован, либо обработан. Один процесс также может сигнализировать другому, тем самым превращая сигналы в механизм IPC.

Подумайте, как можно корректно закрыть многопроцессорное приложение, такое как веб-сервер Nginx, из другого процесса. Функция убить :

  int kill(pid_t pid, int signum); /* объявление */  

может использоваться одним процессом для завершения другого процесса или группы процессов.Если первый аргумент функции kill больше нуля, этот аргумент обрабатывается как pid (идентификатор процесса) целевого процесса; если аргумент равен нулю, он идентифицирует группу процессов, к которой принадлежит отправитель сигнала.

Вторым аргументом kill является либо стандартный номер сигнала (например, SIGTERM или SIGKILL ), либо 0, что делает вызов signal запросом о том, действительно ли pid в первом аргументе действительный. Таким образом, корректное завершение многопроцессорного приложения может быть выполнено путем отправки сигнала terminate — вызова функции kill с SIGTERM в качестве второго аргумента — группе процессов, составляющих приложение. (Главный процесс Nginx может завершить рабочие процессы вызовом kill , а затем завершиться сам.) Функция kill , как и многие библиотечные функции, заключает в себе мощность и гибкость в простом синтаксисе вызова.

Пример 3. Грамотное завершение работы многопроцессорной системы

 #include  
#include
#include
#include
#include

void graceful(int signum) {
  printf("\tДочерний элемент, подтверждающий полученный сигнал: %i\n", signum);
  puts("\tChild скоро завершится корректно...");
 спать(1);
  puts("\tChild завершается сейчас...");
_выход(0); /* ускоренное уведомление родителя */
}

void set_handler() {
  struct sigaction current;
  sigemptyset(¤t. маска_са); /* очистить набор сигналов */
 current.sa_flags = 0; /* позволяет установить sa_handler, а не sa_action */
  current.sa_handler = изящный; /* указать обработчик */
  sigaction(SIGTERM, ¤t, NULL); /* регистрация обработчика */
}

void child_code() {
  set_handler();

  while (1) {   /** цикл до прерывания **/
    sleep(1);
    puts("\tРебенок только что проснулся, но снова засыпает.");
  }
}

void parent_code(pid_t cpid) {
  puts("Родитель временно спит...");
  sleep(5);

  /* Попытка завершить дочерний процесс. */
  if (-1 == kill(cpid, SIGTERM)) {
    perror("kill");
    exit(-1 );
  }
  wait(NULL); /** дождаться завершения дочернего процесса **/
  puts("Мой дочерний процесс завершен, я собираюсь выйти сам...");
}

int main() {
  pid_t pid = fork();
 if (pid < 0) {
    perror("fork");
    return -1; /* error */
}
 if (0 == pid)
    child_code();
else
parent_code(pid);
  return 0;  /* normal */
}

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

  • Родительский процесс пытается разветвить дочерний процесс. В случае успеха форка каждый процесс выполняет свой собственный код: дочерний процесс выполняет функцию child_code , а родитель выполняет функцию parent_code .
  • Дочерний процесс входит в потенциально бесконечный цикл, в котором дочерний процесс засыпает на секунду, печатает сообщение, снова засыпает и так далее. Именно сигнал SIGTERM от родителя заставляет дочерний элемент выполнить функцию обратного вызова для обработки сигнала грациозно .Таким образом, сигнал вырывает дочерний процесс из его цикла и устанавливает корректное завершение как дочернего, так и родительского процессов. Ребенок печатает сообщение перед завершением.
  • Родительский процесс после разветвления дочернего процесса приостанавливается на пять секунд, чтобы дочерний процесс мог выполняться какое-то время; конечно, ребенок в основном спит в этой симуляции. Затем родитель вызывает функцию kill с SIGTERM в качестве второго аргумента, ждет завершения дочернего процесса и затем завершает работу.

Вот результат пробного запуска:

 

% ./shutdown
Родитель некоторое время спит...
        Ребенок только что проснулся, но снова засыпает.
        Ребенок только что проснулся, но снова засыпает.
        Ребенок только что проснулся, но снова засыпает.
        Ребенок только что проснулся, но снова засыпает.
        Дочерний элемент, подтверждающий получение сигнала: 15  ## SIGTERM is 15
        Дочерний процесс завершается корректно...
        Дочерний процесс завершается сейчас...
Мой ребенок завершен, я собираюсь выйти из себя...

Для обработки сигнала в примере используется библиотечная функция sigaction (рекомендуется POSIX), а не устаревшая функция signal , которая имеет проблемы с переносимостью. Вот сегменты кода, представляющие наибольший интерес:

  • Если вызов fork завершается успешно, родительский объект выполняет функцию parent_code , а дочерний объект выполняет функцию child_code . Родитель ждет пять секунд, прежде чем сигнализировать ребенку:
     puts("Родитель спит какое-то время..."); 
    спать (5);
    если (-1 == kill(cpid, SIGTERM)) {
    ...

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

  • Функция child_code сначала вызывает set_handler , а затем переходит в потенциально бесконечный спящий цикл. Вот функция set_handler для ознакомления:
     

    void set_handler() {
    struct sigaction current; /* текущая настройка */
      sigemptyset(¤t. маска_са); /* очистить набор сигналов */
     current.sa_flags = 0; /* для установки sa_handler, а не sa_action */
      current.sa_handler = изящный; /* указать обработчик */
      sigaction(SIGTERM, ¤t, NULL); /* регистрируем обработчик */
    }

    Первые три строки — подготовка. Четвертый оператор устанавливает обработчик в функцию изящный , которая печатает некоторые сообщения перед вызовом _exit для завершения. Затем пятый и последний оператор регистрирует обработчик в системе посредством вызова sigaction .Первый аргумент sigaction SIGTERM для terminate , второй — текущая настройка sigaction , а последний аргумент ( NULL в данном случае) может использоваться для сохранения предыдущей настройки sigaction , возможно для последующего использования.

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

Завершение этой серии

Эти три статьи о IPC охватывают следующие механизмы с помощью примеров кода:

  • Общие файлы
  • Общая память (с семафорами)
  • Трубы (именные и безымянные)
  • Очереди сообщений
  • Розетки
  • Сигналы

Даже сегодня, когда языки, ориентированные на потоки, такие как Java, C# и Go, стали настолько популярными, IPC остается привлекательным, поскольку параллелизм за счет многопроцессорности имеет очевидное преимущество перед многопоточностью: каждый процесс по умолчанию имеет свою собственную адресное пространство, которое исключает условия гонки на основе памяти при многопроцессорной обработке, если только не задействован механизм разделяемой памяти IPC.(Общая память должна быть заблокирована как при многопроцессорной обработке, так и при многопоточности для безопасного параллелизма.) Любой, кто написал даже элементарную многопоточную программу с обменом данными через общие переменные, знает, насколько сложно написать потокобезопасную, но понятную программу. эффективный код. Многопроцессорная обработка с однопоточными процессами остается жизнеспособным — и действительно весьма привлекательным — способом использовать преимущества современных многопроцессорных машин без неотъемлемого риска условий гонки на основе памяти.

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

Хотя пример кода (доступный на моем веб-сайте) полностью написан на C, другие языки программирования часто предоставляют тонкие оболочки для этих механизмов IPC. Надеюсь, примеры кода короткие и достаточно простые, чтобы побудить вас к экспериментам.

В Java, как проверить, жив ли сокет, активно ли соединение на определенном порту? Утилита isSocketAlive() • Пакет Crunchify

crunchify.com.tutorials;

 

импорт java.io.IOException;

импорт java.net.InetSocketAddress;

импорт java.net.Socket;

импорт java.net.SocketAddress;

импорт java.net.SocketTimeoutException;

/ **

/ **

* @author Crunchify.com

*

* /

* /

* /

Открытый класс CrundingifyscateSocketAliveTyity {

Общественная статическая пустота Главная (строка [] args) {

/ / Запустите сервер Apache Tomcat на порту 8080 в Eclipse, чтобы увидеть успех

// результат

log(isSocketAliveUitlitybyCrunchify("localhost", 8080));

 

// Теперь измените порт на 8081, и вы должны увидеть ошибку

log(isSocketAliveUitlitybyCrunchify("localhost", 8081));

 

// Подключиться к Crunchify. com на порту 80

log(isSocketAliveUitlitybyCrunchify("crunchify.com", 80));

 

// Подключение к pro.crunchify.com через порт 81

log(isSocketAliveUitlitybyCrunchify("pro.crunchify.com", 81));

 

// Подключение к pro.crunchify.com через порт 80

log(isSocketAliveUitlitybyCrunchify("pro.crunchify.com", 80));

}

/ **

* Crunchify's Isalive Utility

*

* @param hostname

* @param Port

* @return Boolean - True / False

* /

Общественный статический булевой isSocketAliveUitlitybyCrunchify (String hostName, int port) {

логическое значение isAlive = false;

 

// Создает адрес сокета из имени хоста и номера порта

SocketAddress socketAddress = new InetSocketAddress(hostName, port);

Сокет сокет = новый сокет();

 

// Требуемый тайм-аут - указывается в миллисекундах

int timeout = 2000;

 

log("hostName: " + hostName + ", port: " + port);

попытка {

сокет. подключить (адрес сокета, время ожидания);

socket.close();

isAlive = истина;

 

} catch (исключение SocketTimeoutException) {

System.out.println("SocketTimeoutException " + hostName + ":" + port + "." + exception.getMessage());

} catch (исключение IOException) {

System.out.println(

"IOException - невозможно подключиться к " + hostName + ":" + порт + "." + exception.getMessage());

}

return isAlive;

}

 

// Простая утилита журнала

private static void log(String string) {

System.out.println(строка);

}

 

// Утилита Simple log возвращает логический результат

private static void log(boolean isAlive) {

System.out.println("isAlive result: " + isAlive + "\n");

}

 

}

стандарт/нетто

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

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

Чтобы использовать процедуры SSL, определенные в этом модуле, вам потребуется скомпилировать приложение с флагом -d:ssl. Дополнительные сведения см. в процедуре newContext.

В Windows библиотека SSL проверяет действительные сертификаты. Для этой цели используется файл cacert.pem, извлеченный из https://curl.se/ca/cacert.pem. Помимо DLL-библиотек OpenSSL (например, libssl-1_1-x64.dll, libcrypto-1_1-x64.dll), вам также необходимо отправить cacert.pem с вашим .exe-файлом.

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

Пример: cmd: -r:off

 импорт стандарт/нетто
пусть сокет = новый сокет ()
socket. connect("google.com", Port(80)) 
Для SSL используйте следующий пример:

Пример: cmd: -r:off -d:ssl

 импорт стандарт/нетто
пусть сокет = новый сокет ()
пусть ctx = newContext()
обернуть сокет (ctx, сокет)
разъем.connect("google.com", Port(443)) 
UDP - это протокол без установления соединения, поэтому сокеты UDP не должны явно вызывать процедуру соединения. Они могут просто начать отправку данных немедленно.

Пример: cmd: -r:off

 импорт стандарт/нетто
пусть сокет = новый сокет (AF_INET, SOCK_DGRAM, IPPROTO_UDP)
socket.sendTo("192.168.0.1", Порт(27960), "статус\n") 

После создания сокета с помощью процедуры newSocket можно создать сервер TCP, вызвав процедуры bindAddr и listen.

Пример: cmd: -r:off

 импорт стандарт/нетто
пусть сокет = новый сокет ()
socket.bindAddr (Порт (1234))
сокет.слушай()


клиент var: сокет
переменный адрес = ""
пока правда:
  socket.acceptAddr(клиент, адрес)
  echo "Клиент подключен с: ", адрес 
т. к., nativesockets, os, strutils, times, set, options, monotimes, ssl_config, winlean, openssl, ssl_certs, winlean
 ReadLineResult = перечисление
  ReadFullLine, ReadPartialLine, ReadDisconnected, ReadNone 
результат для readLineAsync Источник Редактировать
 SOBool = перечисление
  OptAcceptConn, OptBroadcast, OptDebug, OptDontRoute, OptKeepAlive,
  OptOOBInline, OptReuseAddr, OptReusePort, OptNoDelay 
Логические параметры сокета.Источник Редактировать
 SslContext = объект ссылки
  контекст*: SslCtx
  referencedData: HashSet[int]
  экстраинтернал: сслконтекстекстраинтернал
 
Источник Редактировать
 proc `==`(lhs, rhs: IpAddress): bool {....raises: [], tags: [].} 
Сравнивает два IP-адреса на равенство. Возвращает true, если адреса равны Источник Редактировать
 proc accept(сервер: Socket; клиент: var owned(Socket); flags = {SafeDisconn};
            наследуемый = определенный (nimInheritHandles)) {. ...теги: [ReadIOEffect],
    вызывает: [OSError, IOError, SslError].} 

Эквивалент acceptAddr, но не возвращает адрес, а только сокет.

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

Вызов accept может привести к ошибке, если подключающийся сокет отключится во время приема. Если указан флаг SafeDisconn, то эта ошибка не будет вызвана, а вместо этого снова будет вызван accept.

Источник Редактировать
 proc acceptAddr (сервер: Socket; клиент: var owned (Socket); адрес: var string;
                флаги = {SafeDisconn}; наследуемый = определенный (nimInheritHandles)) {.
    ... теги: [ReadIOEffect], gcsafe, блокировки: 0, ... вызывает: [OSError, IOError, SslError].} 

Блокируется до установления соединения с клиентом. Когда соединение установлено, клиент устанавливает клиентский сокет, а адрес — адрес подключающегося клиента. Эта функция вызовет OSError, если произойдет ошибка.

Полученный клиент унаследует все свойства сокета сервера. Например: буферизуется сокет или нет.

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

Вызов accept может привести к ошибке, если подключающийся сокет отключится во время приема. Если указан флаг SafeDisconn, то эта ошибка не будет вызвана, а вместо этого снова будет вызван accept.

Источник Редактировать
 proc bindAddr(socket: Socket; port = Port(0); address = "") {.
    ...теги: [ReadIOEffect], вызывает: [ValueError, OSError].} 

Привязывает адрес:порт к сокету.

Если адрес "", то будет привязан ADDR_ANY.

Источник Редактировать
 proc bindUnix(сокет: сокет; путь: строка) {....поднимает: [], теги: [].} 
Привязывает сокет Unix к пути. Это работает только в системах в стиле Unix: Mac OS X, BSD и Linux. Источник Редактировать
 proc clientGetPskFunc=(ctx: SslContext; fun: SslClientGetPskFunc) {.... вызывает: [Exception], теги: [RootEffect].} 

Устанавливает функцию, которая возвращает идентификатор клиента и PSK на основе подсказки идентификатора с сервера.

Используется только в наборах шифров PSK.

Источник Редактировать
 proc close(socket: Socket; flags = {SafeDisconn}) {.
    ... вызывает: [Exception, LibraryError, SslError, OSError], теги: [RootEffect].} 

Закрывает сокет.

Если сокет является сокетом SSL/TLS, этот процесс также отправит партнеру уведомление о закрытии.Если SafeDisconn находится в состоянии флажков, отказ от этого из-за отключения будет проигнорирован. Как правило, это безопасно на практике. Подробнее см. здесь.

Источник Редактировать
 proc connect(socket: Socket; address: string; port = Port(0)) {.
    ...теги: [ReadIOEffect], вызывает: [OSError, SslError]. } 

Соединяет сокет с адресом: порт. Адрес может быть IP-адресом или именем хоста. Если адрес является именем хоста, эта функция будет пробовать каждый IP-адрес этого имени хоста.htons уже выполняется на порту, поэтому вы не должны этого делать.

Если сокет является сокетом SSL, рукопожатие будет выполнено автоматически.

Источник Редактировать
 proc connect(socket: Socket; address: string; port = Port(0); timeout: int) {.
    ...теги: [ReadIOEffect, WriteIOEffect], вызывает: [OSError, TimeoutError].} 

Подключается к серверу по указанному адресу на порту, указанному портом.

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

Источник Редактировать
 proc connectUnix(сокет: сокет; путь: строка) {....поднимает: [], теги: [].} 
Подключается к сокету Unix по пути. Это работает только в системах в стиле Unix: Mac OS X, BSD и Linux. Источник Редактировать
 proc destroyContext(ctx: SslContext) {.... вызывает: [SslError], теги: [].} 
Свободная память, на которую ссылается SslContext. Источник Редактировать
 proc dial (адрес: строка; порт: порт; протокол = IPPROTO_TCP; буфер = истина): принадлежит (
    Разъем) {....теги: [ReadIOEffect, WriteIOEffect], вызывает: [OSError, IOError].} 
Устанавливает соединение с указанной парой адрес:порт по указанному протоколу. Процедура повторяет возможные разрешения адреса, пока не добьется успеха, что означает, что она без проблем работает как с IPv4, так и с IPv6. Возвращает Socket, готовый к отправке или получению данных. Источник Редактировать
 proc getLocalAddr(socket: Socket): (строка, порт) {.
    ... вызывает: [OSError, Exception], теги: [].} 

Получить локальный адрес сокета и номер порта.

Это высокоуровневый интерфейс для getsockname.

Источник Редактировать
 proc getPeerAddr(socket: Socket): (строка, порт) {. ... вызывает: [OSError, Exception],
    теги: [].} 

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

Это высокоуровневый интерфейс для getpeername.

Источник Редактировать
 proc getPeerCertificates(socket: Socket): seq[Certificate] {.... вызывает: [Exception], теги: [].} 
Возвращает цепочку сертификатов, полученных узлом, к которому мы подключены через данный сокет. Рукопожатие должно быть завершено, и цепочка сертификатов должна быть успешно проверена, иначе будет возвращена пустая последовательность. Цепочка упорядочена от листового сертификата к корневому сертификату. Источник Редактировать
 proc getPeerCertificates(sslHandle: SslPtr): seq[Certificate] {.
    ... вызывает: [Exception], теги: [].} 
Возвращает цепочку сертификатов, полученную узлом, к которому мы подключены через соединение OpenSSL, представленное sslHandle. Рукопожатие должно быть завершено, и цепочка сертификатов должна быть успешно проверена, иначе будет возвращена пустая последовательность. Цепочка упорядочена от листового сертификата к корневому сертификату. Источник Редактировать
 proc getPrimaryIPAddr(dest = parseIpAddress("8.8.8.8")): IpAddress {.
    ... вызывает: [OSError, OSError, SslError, ValueError, Exception, LibraryError],
    теги: [ReadIOEffect, RootEffect].} 

Находит локальный IP-адрес, обычно назначаемый eth0 в локальной сети или wlan0 в WiFi, используемый для доступа к внешнему адресу. Полезно для запуска локальных служб.

Трафик не отправляется.

Поддерживает IPv4 и v6. Вызывает OSError, если внешняя сеть не настроена.

Пример: cmd: -r:off

 эхо getPrimaryIPAddr() 
Источник Редактировать
 proc getSocketError(socket: Socket): OSErrorCode {.... вызывает: [OSError], теги: [].} 
Проверяет osLastError на допустимую ошибку. Если он был сброшен, он использует последнюю ошибку, сохраненную в объекте сокета. Источник Редактировать
 proc IPv4_any(): IpAddress {. ... поднимает: [], теги: [].} 
Возвращает любой адрес IPv4, который можно использовать для прослушивания на всех доступных сетевых адаптерах. Источник Редактировать
 proc IPv6_any(): IpAddress {.... поднимает: [], теги: [].} 
Возвращает любой адрес IPv6 (::0), который можно использовать для прослушивания на всех доступных сетевых адаптерах. Источник Редактировать
 proc isIpAddress (addressStr: строка): bool {....теги: [], поднимает: [].} 
Проверяет, является ли строка IP-адресом. Возвращает true, если да, иначе false. Источник Редактировать
 proc listen(socket: Socket; backlog = SOMAXCONN) {....tags: [ReadIOEffect],
    вызывает: [OSError].} 

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

При сбое вызывает ошибку OSError.

Источник Редактировать
 proc newContext(protVersion = protSSLv23; verifyMode = CVerifyPeer;
                Файл Сертификата = ""; ключевой файл = ""; cipherList = CiphersIntermediate;
                кадир = ""; caFile = ""): SslContext {. ... вызывает: [Exception, LibraryError, SslError, IOError, OSError],
    теги: [RootEffect, ReadDirEffect, ReadEnvEffect, ReadIOEffect].} 

Создает контекст SSL.

Версия протокола указывает используемый протокол. SSLv2, SSLv3, TLSv1 доступны с добавлением protSSLv23, что обеспечивает совместимость со всеми из них.

Существует три варианта режима проверки: CVerifyNone: сертификаты не проверяются; CVerifyPeer: сертификаты проверяются; CVerifyPeerUseEnvVars: сертификаты проверяются, а необязательные переменные среды SSL_CERT_FILE и SSL_CERT_DIR также используются для поиска сертификатов

Определение nimDisableCertificateValidation переопределяет режим verifyMode и глобально отключает проверку сертификата!

Сертификаты ЦС будут загружены в следующем порядке из:

  • caFile, caDir, параметры, если установлены
  • , если для параметра verifyMode установлено значение CVerifyPeerUseEnvVars, используются переменные среды SSL_CERT_FILE и SSL_CERT_DIR
  • набор файлов и каталогов из файла ssl_certs.

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

Сертификаты можно создать с помощью следующей команды:

  • openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout mykey.pem -out mycert.pem

или с помощью ECDSA:

  • openssl ecparam -out mykey.pem -name secp256k1 -genkey
  • openssl req -new -key mykey.pem -x509 -nodes -days 365 -out mycert.пэм
Источник Редактировать
 proc newSocket (домен, sockType, протокол: cint; буферизован = истина;
               наследуемый = определенный (nimInheritHandles)): принадлежит (Socket) {.
    ... вызывает: [OSError], теги: [].} 

Создает новый сокет.

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

В случае возникновения ошибки будет вызвана ошибка OSError.

Источник Редактировать
 proc newSocket(domain: Domain = AF_INET; sockType: SockType = SOCK_STREAM;
               протокол: Протокол = IPPROTO_TCP; буферизовано = верно;
               наследуемый = определенный (nimInheritHandles)): принадлежит (Socket) {.
    ... вызывает: [OSError], теги: [].} 

Создает новый сокет.

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

В случае возникновения ошибки будет вызвана ошибка OSError.

Источник Редактировать
 proc newSocket(fd: SocketHandle; домен: домен = AF_INET;
               sockType: SockType = SOCK_STREAM;
               протокол: Протокол = IPPROTO_TCP; буферизован = истина): принадлежит (сокет) {.
    ... поднимает: [], теги: [].} 
Создает новый сокет, как указано в параметрах. Источник Редактировать
 proc pskIdentityHint=(ctx: SslContext; подсказка: строка) {. ...вызывает: [SslError],
    теги: [].} 

Устанавливает идентификационную подсказку, передаваемую серверу.

Используется только в наборах шифров PSK.

Источник Редактировать
 proc readLine(сокет: сокет; строка: var string; тайм-аут = -1;
              флаги = {SafeDisconn}; maxLength = MaxLineLength) {.
    ...теги: [ReadIOEffect, TimeEffect], вызывает: [TimeoutError, OSError, SslError].} 

Читает строку данных из сокета.

Если читается вся строка, \r\L не добавляется к строке, однако, если читается только \r\L, строка будет установлена ​​на нее.

Если розетка отключена, линия будет установлена ​​на "".

В случае ошибки сокета будет вызвано исключение OSError.

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

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

Предупреждение: В настоящее время поддерживается только флаг SafeDisconn.

Источник Редактировать
 proc recv(socket: Socket; data: pointer; size: int): int {....tags: [ReadIOEffect],
    поднимает: [].} 

Получает данные из сокета.

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

Источник Редактировать
 proc recv(socket: Socket; data: var string; size: int; timeout = -1;
          flags = {SafeDisconn}): int {.... вызывает: [TimeoutError, OSError, SslError],
                                        теги: [ReadIOEffect, TimeEffect].} 

Версия recv более высокого уровня.

Читает от до байт из сокета в данные.

Для буферизованных сокетов эта функция попытается прочитать все запрошенные данные. Он будет считывать эти данные в кусках BufferSize.

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

Когда возвращается 0, соединение сокета было закрыто.

Эта функция вызовет исключение OSError при возникновении ошибки. Значение меньше 0 никогда не возвращается.

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

Предупреждение: В настоящее время поддерживается только флаг SafeDisconn.

Источник Редактировать
 proc recv(socket: Socket; size: int; timeout = -1; flags = {SafeDisconn}): string {.встроенный, ... вызывает: [TimeoutError, OSError, SslError],
    теги: [ReadIOEffect, TimeEffect].} 

Версия recv более высокого уровня, которая возвращает строку.

Читает от до байт из сокета в результат.

Для буферизованных сокетов эта функция попытается прочитать все запрошенные данные. Он будет считывать эти данные в кусках BufferSize.

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

Когда возвращается "", соединение сокета было закрыто.

Эта функция вызовет исключение OSError при возникновении ошибки.

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

Предупреждение: В настоящее время поддерживается только флаг SafeDisconn.

Источник Редактировать
 proc recvFrom(socket: Socket; data: var string; length: int;
              адрес: переменная строка; порт: var Порт; флаги = 0'i32): int {....теги: [ReadIOEffect], вызывает: [Exception, OSError, IOError, ValueError].} 

Получает данные из сокета. Эта функция обычно должна использоваться с сокетами без установления соединения (сокеты UDP).

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

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

Источник Редактировать
 proc recvLine(сокет: сокет; тайм-аут = -1; флаги = {SafeDisconn};
              maxLength = MaxLineLength): строка {.
    ... вызывает: [TimeoutError, OSError, SslError], теги: [ReadIOEffect, TimeEffect].} 

Читает строку данных из сокета.

Если читается вся строка, \r\L не добавляется к результату, однако, если читается только \r\L, результат будет установлен на нее.

Если сокет отключен, результатом будет "".

В случае ошибки сокета будет вызвано исключение OSError.

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

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

Предупреждение: В настоящее время поддерживается только флаг SafeDisconn.

Источник Редактировать
 proc sendTo(сокет: сокет; адрес: строка; порт: порт; данные: указатель;
            размер: инт; аф: Домен = AF_INET; флаги = 0'i32) {.
    ...теги: [WriteIOEffect], вызывает: [OSError].} 

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

При возникновении ошибки будет возбуждено исключение OSError.

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

Примечание: Этот процесс недоступен для сокетов SSL.

Источник Редактировать
 proc sendTo(сокет: сокет; адрес: строка; порт: порт; данные: строка) {.
    ...теги: [WriteIOEffect], вызывает: [OSError].} 

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

При возникновении ошибки будет возбуждено исключение OSError.

Это высокоуровневая версия вышеуказанной функции sendTo.

Источник Редактировать
 proc serverGetPskFunc=(ctx: SslContext; fun: SslServerGetPskFunc) {.
    ... вызывает: [Exception], теги: [RootEffect].} 

Устанавливает функцию, которая возвращает PSK на основе идентификатора клиента.

Используется только в наборах шифров PSK.

Источник Редактировать
 proc sessionIdContext=(ctx: SslContext; sidCtx: строка) {. ... вызывает: [SslError],
    теги: [].} 

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

TLS-клиенты могут попытаться возобновить сеанс с использованием контекста идентификатора сеанса, поэтому он должен быть установлен, если для параметра verifyMode установлено значение CVerifyPeer или CVerifyPeerUseEnvVars, в противном случае соединение завершится ошибкой и при возобновлении будет вызвано сообщение SslError.

  • Полезно, только если установлено на стороне сервера.
  • Должен быть уникальным для каждого приложения во избежание сбоев в работе клиентов.
  • sidCtx должен иметь длину не более 32 символов.
Источник Редактировать
 proc setSockOpt(socket: Socket; opt: SOBool; значение: bool; level = SOL_SOCKET) {.
    ...теги: [WriteIOEffect], вызывает: [OSError]. } 
Устанавливает для параметра opt логическое значение, заданное значением.

Пример: cmd: -r:off

 пусть сокет = новый сокет ()
разъем.setSockOpt(OptReusePort, правда)
socket.setSockOpt (OptNoDelay, правда, уровень = IPPROTO_TCP.cint) 
Источник Редактировать
 proc skip(socket: Socket; size: int; timeout = -1) {.
    ... вызывает: [TimeoutError, OSError], теги: [TimeEffect, ReadIOEffect].} 

Пропускает количество байтов.

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

Возвращает количество пропущенных байтов.

Источник Редактировать
 proc socketError(сокет: сокет; ошибка: int = -1; асинхронный = ложь;
                 lastError = -1.OSErrorCode; флаги: set[SocketFlag] = {}) {.
    ... gcsafe, вызывает: [SslError, OSError], теги: [].} 

Вызывает ошибку OSError на основании кода ошибки, возвращаемого функцией SSL_get_error (для сокетов SSL), и osLastError в противном случае.

Если async имеет значение true, ошибка не будет выдана в случае, если ошибка была вызвана отсутствием доступных для чтения данных.

Если err не ниже 0, исключение не будет возбуждено.

Если flags содержит SafeDisconn, исключение не будет вызвано, если ошибка была вызвана отключением однорангового узла.

Источник Редактировать
 proc sslHandle(self: Socket): SslPtr {.... поднимает: [], теги: [].} 
Получить указатель ssl сокета. Полезно для взаимодействия с openssl. Источник Редактировать
 proc toCInt(opt: SOBool): cint {....raises: [], tags: [].} 
Преобразует SOBool в его представление cint Socket Option. Источник Редактировать
 proc wrapConnectedSocket(ctx: SslContext; socket: Socket;
                         рукопожатие: SslHandshakeType; имя хоста: строка = "") {.
    ... вызывает: [SslError, Exception], теги: [RootEffect].} 

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

Это должно быть вызвано на подключенном сокете и немедленно выполнит квитирование SSL.

FIXME: Отказ от ответственности : Этот код не был тщательно протестирован, может быть очень небезопасным и подвержен уязвимостям системы безопасности.

Источник Редактировать
 proc wrapSocket(ctx: SslContext; socket: Socket) {.... вызывает: [SslError], теги: [].} 

Помещает сокет в контекст SSL. Эта функция эффективно превращает сокет в сокет SSL.

Это должно вызываться на неподключенном сокете; сеанс SSL будет запущен при подключении сокета.

FIXME: Отказ от ответственности : Этот код не был тщательно протестирован, может быть очень небезопасным и подвержен уязвимостям системы безопасности.

Источник Редактировать
Порт, $, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, ==, домен, SockType, протокол

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

NET

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

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

Существует два типа коммуникационных протоколов, используемых для программирования сокетов: TCP/IP (Протокол управления передачей/Интернет-протокол) Связь и UDP/IP (Протокол пользовательских дейтаграмм/Интернет-протокол) Связь.

В следующем разделе мы собираемся передать программу сокетов сервера и программу сокетов клиента через VB.NET с использованием TCP/IP Связь.

На картинке выше показаны коммуникационные интерфейсы.

Программа сокета сервера:

Здесь программа Server Socket выполняется через консольное приложение VB.NET. Здесь Сервер прослушивает запрос клиента, и когда сервер получает запрос от Клиента, Сервер отправляет ответ Клиенту. Щелкните следующую ссылку, чтобы подробно ознакомиться с программой Server Socket.

Программа клиентского сокета:

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

Как запустить эту программу?

Программирование сокетов состоит из двух разделов.

1. Программа серверных сокетов

2. Программа клиентских сокетов

Когда вы закончите кодирование программы, сначала вам нужно запустить программу Server Socket, затем вы получите экран DOS с сообщением Server Started .

Следующим шагом является запуск программы клиентских сокетов. Затем вы получите сообщение на экране клиента Client Started , в то же время вы проверите на экране сервера сообщение Accept connection from client .

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






T_HSOCKET

  1. TF6310 TC3 TCP/IP
  2. PLC API
  3. Типы данных
  4. T_HSOCKET

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

  TYPE T_HSOCKET 
STRUCT
    дескриптор     : UDINT;
    localAddr  : ST_SockAddr; (* Локальный адрес *)
    remoteAddr : ST_SockAddr; (* Адрес удаленной конечной точки *)
END_STRUCT
END_TYPE

 

 

С помощью сервера соединений TwinCAT TCP/IP можно открывать и закрывать следующие сокеты: сокет прослушивателя, удаленный клиентский сокет или локальный клиентский сокет. В зависимости от того, какой из этих сокетов был открыт сервером соединений TwinCAT TCP/IP, соответствующая адресная информация вводится в переменные localAddr и remoteAddr.

Дескриптор соединения на стороне сервера

  • Функциональный блок FB_SocketListen открывает сокет слушателя и возвращает дескриптор соединения сокета слушателя.
  • Дескриптор подключения сокетов прослушивателя передается функциональному блоку FB_SocketAccept. Затем FB_SocketAccept вернет дескрипторы подключения удаленных клиентов.
  • Функциональный блок FB_SocketAccept возвращает новый дескриптор соединения для каждого подключенного удаленного клиента.
  • Затем дескриптор соединения передается в функциональные блоки FB_SocketSend и/или FB_SocketReceive, чтобы иметь возможность обмениваться данными с удаленными клиентами.
  • Дескриптор соединения удаленного клиента, который является нежелательным или больше не требуется, передается функциональному блоку FB_SocketClose, который закрывает сокет удаленного клиента.
  • Дескриптор соединения сокета слушателя, который больше не требуется, также передается функциональному блоку FB_SocketClose, который закрывает сокет слушателя.

Дескриптор соединения на стороне клиента

  • Функциональный блок FB_SocketConnect возвращает дескриптор соединения локального клиентского сокета.
  • Затем дескриптор соединения передается в функциональные блоки FB_SocketSend и FB_SocketReceive, чтобы иметь возможность обмениваться данными с удаленным сервером.
  • Затем тот же дескриптор соединения передается функциональному блоку FB_SocketClose, чтобы закрыть соединение, которое больше не требуется.

Функциональный блок FB_SocketCloseAll может использоваться для закрытия всех дескрипторов соединения (сокетов), которые были открыты исполняющей системой ПЛК.Это означает, что при вызове FB_SocketCloseAll в одной из задач первой системы исполнения (порт 801) все сокеты, которые были открыты в первой системе исполнения, закрываются.

© 2021 Beckhoff Automation

Программирование сетевых сокетов — документация Idris 1.3.3

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

  • Готов , исходное состояние
  • Связанный , что означает, что он был привязан к адресу, готовому для входящих соединения
  • Прослушивание , что означает прослушивание входящих соединений
  • Open , что означает готовность к отправке и приему данных;
  • Закрыт , что означает, что он больше не активен.

На следующей диаграмме показано, как операции, предоставляемые API, изменяют состояние, где Готов — начальное состояние:

Если соединение Open , то мы также можем отправить сообщения на другой конец соединения и recv сообщений от него.

Пакет contrib содержит модуль Network.Socket , который предоставляет примитивы для создания сокетов и отправки и получения Сообщения.Он включает в себя следующие функции:

 bind: (sock: Socket) -> (addr: возможно, SocketAddress) -> (port: Port) -> IO Int
connect : (sock : Socket) -> (addr : SocketAddress) -> (port : Port) -> IO ResultCode
слушать: (носок: сокет) -> IO Int
accept: (sock: Socket) -> IO (либо SocketError (Socket, SocketAddress))
send : (sock : Socket) -> (msg : String) -> IO (либо код результата SocketError)
recv : (sock : Socket) -> (len : ByteLength) -> IO (либо SocketError (String, ResultCode))
закрыть: сокет -> ввод-вывод ()
 

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

Используя ST , мы можем предоставить лучший API, который точно объясняет, как каждая операция влияет на состояние соединения. В этом разделе мы определить API сокетов, а затем использовать его для реализации «эхо-сервера», который отвечает на запросы от клиента, возвращая одно отправленное сообщение клиентом.

Определение интерфейса

Sockets

Вместо использования IO для низкоуровневого программирования сокетов мы реализуем интерфейс с использованием ST , который точно описывает, как каждая операция влияет на состояние сокетов и описывает, когда сокеты создаются и удалено.Мы начнем с создания типа для описания абстрактного состояния. розетки:

 данных SocketState = Ready | Связанный | Прослушивание | Открыть | Закрыто
 

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

Сокеты интерфейса
 (m : Тип -> Тип), где
  Носок: SocketState -> Тип
 

Создаем сокеты методом socket . SocketType определен библиотекой сокетов и описывает, является ли сокет TCP, UDP, или какая-то другая форма. Мы будем использовать Stream для этого повсюду, что указывает на TCP-сокет.

 сокет: SocketType -> ST m (либо () Var) [addIfRight (Sock Ready)]
 

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

Чтобы определить сервер, после того как мы создали сокет, нам нужно привязать его в порт. Мы можем сделать это с помощью метода bind :

 bind: (sock: Var) -> (addr: возможно, SocketAddress) -> (port: Port) ->
       ST m (либо () ()) [sock ::: Sock Ready :-> (Sock Closed `или` Sock Bound)]
 

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

  • Если привязка завершается ошибкой, сокет переходит в состояние Sock Closed
  • Если bind завершается успешно, сокет переходит в состояние Sock Bound , как показано на схеме выше

или реализуется следующим образом:

 или: a -> a -> либо b c -> a
или x y = либо (const x) (const y)
 

Таким образом, тип bind может быть эквивалентно записан как:

 bind: (sock: Var) -> (addr: возможно, SocketAddress) -> (port: Port) ->
       STrans m (Или () ()) [носок ::: Носок готов]
                    (либо [sock ::: Sock Closed] [sock ::: Sock Bound])
 

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

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

 слушать : (носок : Вар) ->
         ST m (Either () ()) [sock ::: Sock Bound :-> (Sock Closed `или` Sock Listening)]
 

Сокет в состоянии Listening готов принимать соединения от индивидуальные клиенты:

 принять : (носок : Var) ->
         ST m (Либо () Var)
              [sock ::: Sock Listening, addIfRight (Sock Open)]
 

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

Нам также нужны методы для отправки и получения данных на сокете:

 отправить: (носок: Var) -> Строка ->
       ST m (Или () ()) [sock ::: Sock Open :-> (Sock Closed `или` Sock Open)]
recv : (носок : Var) ->
       ST m (либо () строка) [sock ::: Sock Open :-> (Sock Closed `или` Sock Open)]
 

Как только мы закончим общение с другой машиной через сокет, мы хочу закрыть соединение и удалить сокет:

 закрыть: (носок: Var) ->
        {auto prf : CloseOK st} -> ST m () [sock ::: Sock st :-> Sock Closed]
удалить : (носок : Var) ->
         ST m () [Удалить носок (Sock Closed)]
 

У нас есть предикат CloseOK , используемый close в неявном доказательстве аргумент, который описывает, когда можно закрыть сокет:

 данных CloseOK : SocketState -> Введите где
     ЗакрытьОткрыть : ЗакрытьОК Открыть
     CloseListening : CloseOK Прослушивание
 

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

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

 подключение: (носок: Var) -> SocketAddress -> Порт ->
          ST m (Или () ()) [sock ::: Sock Ready :-> (Sock Closed `или` Sock Open)]
 

Для справки, вот полный интерфейс:

Сокеты интерфейса
 (m : Тип -> Тип), где
  Носок: SocketState -> Тип
  socket : SocketType -> ST m (Ither () Var) [addIfRight (Sock Ready)]
  bind: (sock: Var) -> (addr: возможно, SocketAddress) -> (port: Port) ->
         ST m (либо () ()) [sock ::: Sock Ready :-> (Sock Closed `или` Sock Bound)]
  слушать : (носок : Вар) ->
           ST m (Either () ()) [sock ::: Sock Bound :-> (Sock Closed `или` Sock Listening)]
  принять : (носок : Var) ->
           ST m (Either () Var) [sock ::: Sock Listening, addIfRight (Sock Open)]
  connect: (sock: Var) -> SocketAddress -> Port ->
            ST m (Или () ()) [sock ::: Sock Ready :-> (Sock Closed `или` Sock Open)]
  close : (sock : Var) -> {auto prf : CloseOK st} ->
          ST m() [носок ::: Носок st :-> Носок Закрыт]
  remove : (sock : Var) -> ST m () [Удалить носок (Sock Closed)]
  отправить: (носок: Var) -> строка ->
         ST m (Или () ()) [sock ::: Sock Open :-> (Sock Closed `или` Sock Open)]
  recv : (носок : Var) ->
         ST m (либо () строка) [sock ::: Sock Open :-> (Sock Closed `или` Sock Open)]
 

Вскоре мы увидим, как это реализовать; в основном методы могут быть реализованы в IO , напрямую используя API необработанных сокетов. Хотя сначала посмотрим как использовать API для реализации «эхо-сервера».

Внедрение сервера «Echo» с

сокетами

На верхнем уровне наш эхо-сервер начинается и заканчивается без доступных ресурсов, и использует интерфейсы ConsoleIO и Sockets :

 startServer : (ConsoleIO m, Sockets m) => ST m () []
 

Первым делом нам нужно создать сокет для привязки к порту и прослушивание входящих соединений с использованием сокета .Это может потерпеть неудачу, поэтому нам нужно иметь дело со случаем, когда он возвращает Right sock , где sock - это новая переменная сокета или где она возвращает Left err :

 startServer : (ConsoleIO m, Sockets m) => ST m () []
стартовый сервер =
  do Right sock <- socket Stream
           | Левая ошибка => чистая ()
     ?что теперь
 

Рекомендуется реализовать такую ​​функцию интерактивно, шаг за шагом. шаг, используя отверстия, чтобы увидеть, в каком состоянии находится вся система после каждого шаг. Здесь мы видим, что после успешного вызова сокета мы наличие сокета в состоянии Ready :

 носок : Вар
  m : Тип -> Тип
  ограничение: ConsoleIO m
  ограничение1 : Сокеты m
--------------------------------------
whatNow : STrans m () [sock ::: Sock Ready] (\result1 => [])
 

Далее нам нужно привязать сокет к порту и начать слушать связи. Опять же, каждый из них может выйти из строя. Если да, мы удалим розетка.Сбой всегда приводит к тому, что сокет находится в состоянии Closed , поэтому все, что мы можем сделать, это удалить это:

 startServer : (ConsoleIO m, Sockets m) => ST m () []
стартовый сервер =
  do Right sock <- socket Stream | Левая ошибка => чистая ()
     Правильно ок <- привязать носок Ничего 9442 | Левая ошибка => удалить носок
     Правильно ок <- слушать носок | Левая ошибка => удалить носок
     ?runServer
 

Наконец, у нас есть сокет, который прослушивает входящие соединения:

 хорошо : ()
  носок : Вар
  хорошо1 : ()
  m : Тип -> Тип
  ограничение: ConsoleIO m
  ограничение1 : Сокеты m
--------------------------------------
runServer: STrans m () [sock ::: Sock Listening]
                   (\результат1 => [])
 

Мы реализуем это в отдельной функции. Тип runServer сообщает нам, каким должен быть тип echoServer (отмечая, что нам нужно чтобы указать аргумент m для Sock явно):

 echoServer: (ConsoleIO m, Sockets m) => (sock: Var) ->
             ST m () [удалить носок (Sock {m} Listening)]
 

Мы можем завершить определение startServer следующим образом:

 startServer : (ConsoleIO m, Sockets m) => ST m () []
стартовый сервер =
  do Right sock <- socket Stream | Левая ошибка => чистая ()
     Правильно ок <- привязать носок Ничего 9442 | Левая ошибка => удалить носок
     Правильно ок <- слушать носок | Левая ошибка => удалить носок
     носок эхосервера
 

В echoServer мы продолжим принимать запросы и отвечать на них пока что-то не выйдет из строя, после чего мы закроем сокеты и вернуть.Начнем с попытки принять входящее соединение:

 echoServer: (ConsoleIO m, Sockets m) => (sock: Var) ->
             ST m () [удалить носок (Sock {m} Listening)]
носок эхо-сервера =
  делать правильно новый <- принять носок | Левая ошибка => закрыть носок; снять носок
     ?что теперь
 

Если принять не удается, нам нужно закрыть сокет Listening и удалите его перед возвратом, потому что тип echoServer требует это.

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

 новое: Вар
  носок : Вар
  m : Тип -> Тип
  ограничение: ConsoleIO m
  ограничение1 : Сокеты m
--------------------------------------
whatNow: STrans m () [sock ::: Sock Listening, новый ::: Sock Open]
                      (\результат1 => [])
 

Для завершения echoServer мы получим сообщение о новом socket и повторить его обратно.Когда мы закончим, мы закроем новый сокет , и вернуться к началу echoServer для обработки следующего подключение:

 echoServer: (ConsoleIO m, Sockets m) => (sock: Var) ->
             ST m () [удалить носок (Sock {m} Listening)]
носок эхо-сервера =
  делать правильно новый <- принять носок | Левая ошибка => закрыть носок; снять носок
     Правильный msg <- recv новый | Левая ошибка => закрыть носок; снять носок; удалить новый
     Правильно ок <- отправить новый ("Вы сказали " ++ msg)
           | Левая ошибка => удалить новый; закрыть носок; снять носок
     закрыть новый; удалить новый; носок эхосервера
 

Реализация

сокетов

Чтобы реализовать Sockets в IO , мы начнем с указания конкретного типа для Носок . Мы можем использовать API необработанных сокетов (реализованный в Network.Socket ) для этого и используйте Socket , хранящийся в состоянии , нет независимо от того, в каком абстрактном состоянии находится сокет:

 реализация сокетов ввода-вывода, где
  Sock _ = сокет состояния
 

Большинство методов могут быть реализованы с помощью API необработанных сокетов. напрямую, возвращая Left или Right в зависимости от ситуации. Например, мы можем реализовать socket , bind и listen следующим образом:

 socket ty = do Right sock <- lift $ Socket.сокет AF_INET тип 0
                    | Левая ошибка => чистая (левая ())
               lbl <- новый носок
               чистый (правильный фунт)
bind sock addr port = do ok <- lift $ bind !(read sock) addr port
                         если нормально /= 0
                            затем чистый (левый ())
                            иначе чисто (Правильно ())
listen sock = do ok <- lift $ listen !(read sock)
                 если нормально /= 0
                    затем чистый (левый ())
                    иначе чисто (Правильно ())
 

Есть небольшая трудность с принять , однако, потому что когда мы используйте новый , чтобы создать новый ресурс для открытого соединения, он появляется в начале списка ресурсов, а не в конце. Мы можем увидеть это по написание неполного определения, используя , возвращая , чтобы увидеть, что ресурсы должны быть, если мы вернем Right lbl :

 accept sock = do Right (conn, addr) <- lift $ accept !(читать sock)
                       | Левая ошибка => чистая (левая ())
                 фунт <- новый конн
                 возвращение (правый фунт) ?fixResources
 

Удобно new добавить ресурс в начало список, потому что, как правило, это делает автоматическое построение доказательства с авто -неявно проще для Идриса.С другой стороны, когда мы используем вызов , чтобы сделать меньший набор ресурсов, обновление с ставит заново созданные ресурсы в конце списка, потому что в целом это уменьшает объем повторного заказа ресурсов.

Если мы посмотрим на тип fixResources , мы видим, что нам нужно сделать, чтобы закончить принять :

 _bindApp0 : Сокет
  соединение : сокет
  адрес : SocketAddress
  носок : Вар
  фунт : вар
--------------------------------------
fixResources: STrans IO () [lbl ::: State Socket, sock ::: State Socket]
                      (\value => [sock ::: State Socket, lbl ::: State Socket])
 

Текущий список ресурсов упорядочен lbl , sock , и они нам нужны быть в заказе носок , lbl . Чтобы помочь в этой ситуации, Control.ST предоставляет примитив toEnd , который перемещает ресурс в конец списка. Таким образом, мы можем завершить и принять следующим образом:

 accept sock = do Right (conn, addr) <- lift $ accept !(читать sock)
                       | Левая ошибка => чистая (левая ())
                 фунт <- новый конн
                 возврат (справа фунт) (до конца фунт)
 

Полную реализацию сокетов см. выборки/СТ/Сеть/Сеть.idr в дистрибутиве Idris. Вы также можете найдите там полный эхо-сервер, EchoServer.idr . Существует также сетевой протокол более высокого уровня, RandServer.idr , с использованием иерархии конечные автоматы для реализации высокоуровневого сетевого протокола связи с точки зрения API сокетов нижнего уровня. Это также использует многопоточность, чтобы обрабатывать входящие запросы асинхронно. Вы можете найти более подробную информацию о многопоточности и сервере случайных чисел в черновом документе Конечные автоматы на всем пути вниз Эдвин Брэди.

Добавить комментарий

Ваш адрес email не будет опубликован.