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


хитрости установки коробки под розетку

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

Монтажные коробки для розеток выполняют несколько функций

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

Требования к подрозетникам

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

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

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

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

Переходим к непосредственному монтажу подрозетников

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

Разметка

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

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

  • Для универсального использования — на высоте 30 см от чистого пола (имеется ввиду высота от уложенного чистового покрытия).
  • Для крупной бытовой техники (стиральная машина, холодильник) на высоте 1 метр.
  • Если блоки розеток монтируются над столешницами или тумбочками — не менее, чем в 10 см от поверхности.
  • Особый случай — монтаж розеток для телевизора, подвешенного на стену. Это индивидуальный проект.
  • А вот расстояние между центрами подрозетников — это константа (касается групповой установки, в ряд). Эта величина для установки стандартных розеток составляет 71 мм.

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

Делаем отверстия

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

  1. Коронка по камню (бетону, кирпичу). Классический и самый быстрый вариант сверления стены под круглую коробочку.Диаметр такой насадки, как правило, 70 или 75 мм. Учитывая наружные размеры подрозетников (61–65 мм), лучше воспользоваться большей коронкой. Во-первых, заделать раствором лишнюю щель проще, чем втискивать коробочку в тесное отверстие. Во-вторых, у вас появляется небольшой запас на случай просчета в разметке.Затем, придерживаясь строго центральной разметки, высверливаем отверстия на глубину, превышающую длину подрозетника на 10–15 мм. Готовых отверстий у вас не получится, скорее всего место установки будет выглядеть так:Ничего страшного, сердцевина легко выбивается зубилом или шлямбуром.

    Совет! Как поступить, если на пути коронки попалась арматура? (Касается только бетонных стен).

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

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

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

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

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

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

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

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

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

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

Приступим!

Фон

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

Когда в 1990-х годах появился Интернет, вместе с World Wide Web росло и сетевое программирование.Веб-сервер

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

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

Аннотация

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

Розетки

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

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

История

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

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

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

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

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

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

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

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

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

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

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

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

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

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

МПК

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

См. Также

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

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

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

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

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

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

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

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

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

Класс
 mysocket: "" "только демонстрационный класс - закодирован для ясности, а не эффективности "" " def __init __ (self, sock = None): если носок None: self.sock = socket.socket ( socket.AF_INET, socket.SOCK_STREAM) еще: self.sock = носок def connect (self, host, port): self.sock. 
.

Что такое задняя коробка?

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

Какой задний ящик мне нужен?

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

Пластиковые задние ящики

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

Металлические задние ящики

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

Какой тип задней коробки мне понадобится?

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

Задняя коробка какой глубины мне понадобится?

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

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

Стандартные розетки и переключатели

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

Переключатели: 16 мм
Гнездо и диммеры: 25 мм
Разъемы USB: 35 мм
Переключатели для электробритвы и кухонной плиты: 32 мм

Плоские, безвинтовые и тонкие розетки и выключатели

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

Переключатели 25 мм
Розетки и диммеры 35 мм
USB-разъемы, переключатели для бритвы и кухонных плит 47 мм

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

Задние коробки для поверхностного монтажа

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

Кабельные вводы для открытых ящиков

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

Будьте в безопасности!

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

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

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

Аннотация

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

Розетки

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

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

История

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

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

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

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

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

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

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

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

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

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

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

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

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

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

МПК

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

См. Также

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

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

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

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

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

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

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

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

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

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

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