HOWTO по программированию сокетов — документация по Python 3.11.0

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

Розетки¶

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

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

История¶

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

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

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

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

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

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

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

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

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

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

Читайте также:
Как избавиться от неприятного запаха в холодильнике: 10 простых способов

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

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

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

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

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

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

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

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

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

Код отправки здесь можно использовать практически для любой схемы обмена сообщениями — в Python вы отправляете строки, и вы можете использовать len() для определения их длины (даже если они содержат встроенные символы). В основном это код получения, который становится более сложным. (И в C это не намного хуже, за исключением того, что вы не можете использовать strlen, если в сообщение встроены s.)

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

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

Префикс сообщения с его длиной (скажем, в виде 5 цифровых символов) становится более сложным, потому что (верите или нет), вы можете не получить все 5 символов в одном recv . Играя, вам это сойдет с рук; но при высокой нагрузке на сеть ваш код очень быстро сломается, если вы не используете два цикла recv — первый для определения длины, второй для получения части сообщения с данными. Противный. Это также когда вы обнаружите, что send не всегда удается избавиться от всего за один проход. И несмотря на то, что вы прочитали это, вы в конечном итоге укусите это!

Читайте также:
Индукционный нагрев: что это такое и как это работает

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

Двоичные данные¶

Вполне возможно отправлять двоичные данные через сокет. Основная проблема заключается в том, что не все машины используют одинаковые форматы двоичных данных. Например, порядок байтов в сети — обратный порядок байтов, причем старший байт идет первым, поэтому 16-битное целое число со значением 1 будет состоять из двух шестнадцатеричных байтов 00 01 . Однако большинство распространенных процессоров (x86/AMD64, ARM, RISC-V) имеют прямой порядок следования байтов, с первым младшим значащим байтом — тот же самый 1 будет 01 00 .

В библиотеках сокетов есть вызовы для преобразования 16- и 32-битных целых чисел — ntohl, htonl, ntohs, htons, где «n» означает сеть а «ч» означает кашель, “с” означает короткие а «л» означает длинной. Там, где сетевой порядок является порядком хоста, они ничего не делают, но там, где машина реверсирована, они соответствующим образом меняют местами байты.

В наши дни 64-битных машин ASCII-представление двоичных данных часто меньше, чем двоичное представление. Это связано с тем, что в удивительном количестве случаев большинство целых чисел имеют значение 0 или, может быть, 1. Строка «0» будет состоять из двух байтов, в то время как полное 64-битное целое число будет равно 8. Конечно, это не подходит. с сообщениями фиксированной длины. Решения, решения.

Отключение¶

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

Одним из способов эффективного использования выключения является HTTP-подобный обмен. Клиент отправляет запрос, а затем выполняет shutdown(1) . Это сообщает серверу: «Этот клиент закончил отправку, но все еще может получать». Сервер может обнаружить «EOF» по приему 0 байтов. Он может предположить, что у него есть полный запрос. Сервер отправляет ответ. Если отправка завершается успешно, значит, действительно, клиент все еще получал.

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

Когда сокеты умирают¶

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

Читайте также:
Монтаж светильников в натяжной потолок своими руками: пошаговая инструкция

Неблокирующие сокеты¶

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

В Python вы используете socket.setblocking(False), чтобы сделать его неблокирующим. В C это сложнее (во-первых, вам нужно будет выбирать между разновидностью BSD O_NONBLOCK и почти неотличимой разновидностью POSIX O_NDELAY , которая полностью отличается от TCP_NODELAY ), но это та же самая идея. Вы делаете это после создания сокета, но до его использования. (На самом деле, если вы с ума сошли, вы можете переключаться туда и обратно.)

Основное механическое отличие состоит в том, что send , recv , connect и accept могут возвращаться без каких-либо действий. У вас есть (конечно) несколько вариантов. Можно проверить код возврата и коды ошибок и вообще с ума сойти. Если не верите мне, попробуйте как-нибудь. Ваше приложение станет большим, забагованным и вытянет процессор. Так что давайте пропустим глупые решения и сделаем все правильно.

В C выбор кода довольно сложен. В Python это проще простого, но достаточно близко к версии C, поэтому, если вы понимаете select в Python, у вас не возникнет проблем с ним в C:

Вы передаете три списка select: первый содержит все сокеты, которые вы, возможно, захотите прочитать; второй — все сокеты, в которые вы, возможно, захотите попробовать записать, а последний (обычно оставленный пустым) — те, которые вы хотите проверить на наличие ошибок. Вы должны заметить, что сокет может входить в более чем один список. Вызов select блокируется, но вы можете дать ему тайм-аут. Как правило, это разумный поступок — дайте ему хороший длительный тайм-аут (скажем, минуту), если у вас нет веской причины поступить иначе.

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

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

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

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

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

Читайте также:
Как повесить акустическую пену » вики полезно Звукоизоляционная корова

8 типов настенных электрических выключателей и как их выбрать

Боб Формисано — лицензированный архитектор и строитель с почти 40-летним опытом строительства новых домов и восстановления старых домов. Одной из его специальностей является ремонт старых систем, построенных еще в 1920-х годах, включая оцинкованные водопроводные трубы, проводку с ручкой и трубкой и многое другое. Его статьи о ремонте дома для The Spruce написаны более 10 лет назад.

Ларри Кэмпбелл

Ларри Кэмпбелл (Larry Campbell) — подрядчик-электрик с 36-летним опытом работы в области электропроводки в жилых и коммерческих помещениях. Он работал техником-электронщиком, а затем инженером в IBM Corp., является членом Наблюдательного совета Spruce Home Improvement Review Board.

Джиллиан Дара

Джиллиан — независимый журналист с 10-летним опытом работы в жанре лайфстайл. Она пишет и проверяет факты для TripSavvy, а также проверяет факты для The Spruce.

однополюсные, двухполюсные, трехпозиционные, четырехпозиционные выключатели света

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

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

Смотреть сейчас: объяснение 5 основных типов электрических выключателей

Однополюсный переключатель

однополюсный переключатель

  • Лучше всего подходит для: Управление светильником, прибором или розеткой с одной стены

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

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

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

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

Двухполюсный переключатель

Двухполюсный переключатель

  • Лучше всего подходит для: Управление 240-вольтовым прибором или светильником с одной стены

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

Поскольку цепи на 240 вольт работают с двумя отдельными «горячими» проводами, эти выключатели имеют четыре винтовых клеммы латунного цвета, что позволяет управлять обоими горячими проводами в цепи — входящие провода крепятся к одному набору винтов, а отходящие горячие провода крепятся к другому набору винтов. Эти выключатели обычно рассчитаны на 30 или 40 ампер, а не на 15 или 20 ампер для стандартных однополюсных настенных выключателей.

Читайте также:
Как покрасить чугунную ванну: лучшие средства и самые эффективные технологии

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

Трехпозиционный переключатель

трехпозиционный переключатель

  • Лучше всего подходит для: Управление светильником с двух разных точек на стене в комнате

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

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

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

Четырехпозиционный переключатель

четырехпозиционный переключатель

  • Лучше всего подходит для: Управление осветительным прибором, розеткой или прибором с трех или более разных мест на стене

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

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

Предупреждение

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

Smart Switch

умный выключатель на стене

IGphotography / Getty Images

  • Лучше всего подходит для: Автоматическое или удаленное управление осветительным прибором или прибором

Термин «умный выключатель» относится к настенному выключателю нового типа с внутренней схемой, которая позволяет управлять осветительными приборами или приборами одним из нескольких нетрадиционных способов, например, с помощью голосового помощника (например, Alexa) или с помощью интернет-приложения. Многие современные интеллектуальные выключатели, например, могут позволить вам проверять свет и включать или выключать его с помощью приложения для смартфона из любого места, где есть подключение к Интернету. Или их можно запрограммировать на автоматическое включение или выключение света или приборов по вашему выбору.

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

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

Диммер

Жужжащий диммер нажимается

Ель / Кевин Норрис

  • Лучше всего подходит для: Регулировка интенсивности света

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

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

Читайте также:
Кольца бетонные (жби): разновидности и размеры

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

Переключатель занятости

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

Фотография Бретта Холмса / Getty Images

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

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

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

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

Специальный переключатель

Специальный выключатель света

tab1962 / Getty Images

  • Лучше всего подходит для: Удовлетворение конкретных потребностей света или прибора

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

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

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

Выбор настенного выключателя

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

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

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

Объяснение портов и сокетов TCP/IP

В сети TCP/IP каждое устройство должно иметь IP-адрес.

Компания IP-адрес идентифицирует устройство например компьютер.

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

Точно так же, как IP-адрес идентифицирует компьютер, сеть порт идентифицирует приложение или услуга работает на компьютере.

Использование портов позволяет компьютерам/устройствам запускать несколько служб/приложений..

На приведенной ниже диаграмме показано подключение компьютера к компьютеру и указаны IP-адреса и порты.

Читайте также:
Как сделать красивый стул своими руками: пошаговая инструкция и советы

TCP-IP-порты-сокеты

аналогия

Если вы используете аналогию с домом или многоквартирным домом, IP-адрес соответствует уличному адресу.

Все квартиры имеют один и тот же адрес.

Однако каждая квартира также имеет номер квартиры, который соответствует номеру порта.

Диапазоны номеров портов и общеизвестные порты

Номер порта использует 16 бит и поэтому может иметь значение от в 65535 десятичная дробь

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

Номера портов 0-1023 — общеизвестные порты. Они распределяются по серверные службы , проходя через Internet Assigned Numbers Authority (ИАНА). например, веб-серверы обычно используют порт 80 и SMTP-серверы используют порт 25 (см. схему выше).

Порты 1024-49151- Зарегистрированный порт -Они могут быть зарегистрированы для услуг с IANA и следует рассматривать как полурезервный. Пользовательские программы не должны использовать эти порты.

Порты 49152-65535– они используются клиентские программы и вы можете использовать их в клиентских программах. Когда веб-браузер подключается к веб-серверу, браузер выделяет себе порт в этом диапазоне. Также известен как эфемерные порты.

TCP сокеты

Соединение между двумя компьютерами использует разъем.

Розетка представляет собой комбинацию IP-адрес плюс порт

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

Один смотрит на сайт Google, а другой на сайт Yahoo.

Подключение к Google будет:

Ваш ПК – IP1+порт 60200 ——– Google IP2 +порт 80 (стандартный порт)

Комбинация IP1+60200 = сокет на клиентском компьютере и IP2 + порт 80 = сокет назначения на сервере Google.

Связь с Yahoo будет:

ваш компьютер – IP1+порт 60401 ——–Yahoo IP3 +порт 80 (стандартный порт)

Комбинация IP1+60401 = сокет на клиентском компьютере и IP3 + порт 80 = сокет назначения на сервере Yahoo.

Ноты: IP1 IP-адрес вашего ПК. Номера клиентских портов назначаются динамически и могут использоваться повторно после закрытия сеанса.

TCP и UDP — транспортный уровень

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

IP-адреса реализуются на сетевом уровне, который является IP-уровень.

Порты реализованы на транспортном уровне как часть Заголовок TCP или UDP как показано на схеме ниже:

TCP-IP-пакет

Протокол TCP/IP поддерживает два типа портов: Порт TCP и UDP порт.

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

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

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

Например, веб-сервер обычно использует TCP-порт 80.

Он может использовать любой порт, но приложение веб-сервера предназначен для использования TCP-соединения. См. TCP против UDP

Вот очень хорошее видео, в котором очень хорошо объясняются порты и сокеты.

Проверка открытых портов

В системах Windows и Linux есть утилита под названием NetStat который даст вам список открытых портов на вашем компьютере.

В этих статьях показано, как использовать NetStat на винде и на линуксе.

Вы можете проверить статус порта удаленных машин с помощью линейного сканера портов nmap.

Вы можете установить NMAP на Windows, Linux и Apple. Его можно использовать с графическим пользовательским интерфейсом или в качестве инструмента командной строки.

Вот хорошее видео по использованию Nmap а также описывает процедуры соединения TCP/IP, которые полезны для понимания портов.

Ссылки и ресурсы:

Основы TCP и UDP -Подключение к веб-сайту- Это для программистов, но здесь нет кодирования, только объяснение портов и сокетов.

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

Читайте также:
Оштукатуривание откосов пластиковых окон: Технология работы

Онлайн-тестер портов Набор инструментов для сканирования портов и тестирования веб-серверов.

Статьи по теме:

комментарии 70

Я создал входящий порт UDP (10512); но я не могу увидеть этот порт.
Я также безуспешно пытался создать другие порты в указанном диапазоне.
Зарегистрированные порты: с 1024 по 49151.
portqry —> UDP-порт 10512 (неизвестная служба): НЕ ПРОСЛУШИВАЕТ
Спасибо за любые разъяснения

Вы пытались написать программу для отправки/получения данных на этот порт. Какую утилиту вы используете для просмотра портов.
Rgds

Извините, нет времени исследовать и разрабатывать программу. было бы неплохо. Я пытаюсь использовать онлайн-инструменты. Кажется, я только что узнал, что portqry отлично работает с TCP. Я пытаюсь использовать iperf3; однако пока недостаточно рук. Я вижу, что iperf3 создал входящее правило TCP и UDP. Я удалил ПТС. Мне нужно больше летных часов.
iperf3 -s -p 10512
——————–
Сервер прослушивает 10512
——————–
Я также пытаюсь использовать netstat, чтобы узнать, прослушивается ли порт; однако никакого прогресса в этом отношении.
netstat -ab

показать состояние брандмауэра netsh
netsh покажет порт UDP на клиентском компьютере с Win 11 PRO, но не на сервере 2019.

спасибо за любой вклад

сторона клиента
>iperf3 -c 10.241.71.38 -u -p 10512 -b 10M

Я решил попробовать возиться с переадресацией портов, чтобы попытаться заставить меня и моего друга, которые живут в одном городе и используют одного и того же интернет-провайдера (Спектр), иметь возможность подключаться друг к другу в играх, которые не имеют выделенных серверов. Одноранговая сеть Spectrum — это абсолютный мусор, и мы никогда не сможем подключиться друг к другу, играя в такие игры, как Risk of Rain 2, Elden Ring и т. д. Я пытаюсь найти порт, который помог бы нам решить проблемы с подключением. Любой совет?

Я не геймер, поэтому с такими проблемами не сталкивался. Однако у игр есть свои собственные порты. Вы проверили необходимые порты для этих игр?
Rgds
Стив

Привет Стив,
У меня есть требование. У нас есть веб-приложение, которое подключено к мобильному устройству POS/Android.
Это веб-приложение подключается через TCPIP. На сегодняшний день у нас есть соединения, которые инициируются с устройства. URL-адрес и номер порта веб-сервера настраиваются на устройстве, и соединение инициируется с устройства. Веб-приложение ответит на запрос устройства.
Теперь мы хотим инициировать запрос с сервера. Можем ли мы добавить еще один порт # для этой новой связи?
Точно так же существует третья связь, которая происходит с устройства через определенные промежутки времени. Для этого мы хотим использовать 3-й порт.
Это возможное решение для этого?
С удовольствием обсудим и это отдельно.

Я предполагаю, что вы говорите о веб-сервере. Веб-сервер не может установить соединение.
Rgds
Стив

Уважаемый сэр
Большое спасибо за эту информативную статью.
Я студент первого курса IT.
Сэр, если я посещаю какой-либо конкретный веб-сайт в течение 15 минут и посещаю различные разделы этого веб-сайта (обратная связь/свяжитесь с нами/о нас и т. д.), в таком случае считается ли мое посещение различных разделов одним соединением/одним сеансом или они рассматривается как несколько подключений/сеансов к этому веб-сайту? Также какова роль идентификатора сеанса в TCP IP-связи вместе с портом и сокетом.
Спасибо, сэр
Bhavesh

Это одно соединение TCP/IP. Если вы закроете вкладку, а затем вернетесь, введя URL-адрес, вы получите новое соединение.

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

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

Спасибо, Стив, за то, что сделал это ярко простым.

Читайте также:
Эмаль против акрила - разница между акриловой и эмалевой краской

У меня проблема с приложением, которое использует фиксированные исходные порты для связи с сервером.
Если связь по какой-то причине прерывается, клиенты пытаются снова установить связь, используя тот же исходный порт. Проблема в том, что сервер не получил fin-пакет, который прерывает связь, и он все еще прослушивает связь от клиента в состоянии ESTABLISHED, если вы запускаете netstat -a на сервере. Если бы клиент не использовал фиксированные порты, я бы подумал, что связь будет переподключена с новым сеансом, потому что клиент использовал «+1» на исходном порту, а сервер подключил связь с новым сокетом.

Существует ли «лучшая практика» rfc, объясняющая, почему не рекомендуется использовать фиксированные порты?

Не то чтобы я в курсе.

Замечательно, я отправил его по электронной почте вместе с некоторой информацией
Он работает на Ubuntu
Спасибо за ваше время на это, и да благословит Бог
Al

У меня есть программное обеспечение, которое создает 4 сокета с явно случайными числами (человек, который разработал, не оставил документации)

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

Есть ли способ соединить эти сокеты случайных чисел и порт 9091, чтобы клиент мог подключиться к программному обеспечению?

Заранее спасибо и дай Бог здоровья

Hi
Похоже, что программное обеспечение должно быть сервером, который обычно имеет фиксированные порты. Что делает программное обеспечение?

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

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

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

Ниже его журнал, надеюсь, что это проливает свет, и спасибо

[0121/06/01 12:55:01][0000-00000001] SDSS int server v1.2.0 – b6 (01) запущен в четверг, 03 июля, 2021:1:12 55
[0121/06/01 12:55:01][0000-00000002] уровень отладки установлен на 99
[0121/06/01 12:55:01][0000-00000003] args[ ./dvis -d99 ]
[0121/06/01 12:55:01][0000-00000004] следующая информация о запуске:
[0121/06/01 12:55:01][0000-00000005] stdin handle 0
[0121/06/01 12:55:01][0000-00000006] openSQL( 0x5f687580 )
[0121/06/01 12:55:01][0000-00000007] openSQL: успешное подключение к «127.0.0.1» как «sa»
[0121/06/01 12:55:01][0000-00000008] используется имя хоста ‘stipra.com’
[0121/06/01 12:55:01][0000-00000009] get_ipaddress()
[0121/06/01 12:55:01][0000-00000010] lo IP-адрес 127.0.0.1
[0121/06/01 12:55:01][0000-00000011] wlo1 IP-адрес 192.168.1.142
[0121/06/01 12:55:01][0000-00000012] lo IP-адрес ::1
[0121/06/01 12:55:01][0000-00000013] wlo1 IP Address fe80::d6a7:186d:aa86:5311
[0121/06/01 12:55:01][0000-00000014] get_ipaddress: возвращает IP4-адрес 192.168.1.142
[0121/06/01 12:55:01][0000-00000015] Работает на сервере stipra.com IP-адрес 192.168.1.142
[0121/06/01 12:55:01][0000-00000016] setsockopt вернул 0, errno 11
[0121/06/01 12:55:01][0000-00000017] sockets created
[0121/06/01 12:55:01][0000-00000018] 63420
[0121/06/01 12:55:01][0000-00000019] 29616
[0121/06/01 12:55:01][0000-00000020] 6052
[0121/06/01 12:55:01][0000-00000021] 43464
[0121/06/01 12:55:01][0000-00000022] wait_for_cmd(0x1)
[0121/06/01 12:55:01][0000-00000023] stdin(0)
[0121/06/01 12:55:01][0000-00000024] recv_d( 0, 0x7f90fdd4e010, 8 )
[0121/06/01 12:56:01][0000-00000025] recv_d: Выберите время ожидания, повторная попытка
[0121/06/01 12:57:01][0000-00000026] recv_d: Выберите время ожидания, повторная попытка
[0121/06/01 12:58:01][0000-00000027] recv_d: Выберите время ожидания, повторная попытка
[0121/06/01 12:59:01][0000-00000028] recv_d: Выберите время ожидания, повторная попытка
[0121/06/01 13:00:01][0000-00000029] recv_d: Выберите время ожидания, повторная попытка
[0121/06/01 13:01:01][0000-00000030] recv_d: Выберите время ожидания, повторная попытка
[0121/06/01 13:02:01][0000-00000031] recv_d: Выберите время ожидания, повторная попытка
[0121/06/01 13:03:01][0000-00000032] recv_d: Выберите время ожидания, повторная попытка
[0121/06/01 13:04:01][0000-00000033] recv_d: Выберите время ожидания, повторная попытка
[0121/06/01 13:05:01][0000-00000034] recv_d: Выберите время ожидания, повторная попытка
[0121/06/01 13:06:01][0000-00000035] recv_d: Выберите время ожидания, повторная попытка
[0121/06/01 13:07:01][0000-00000036] recv_d: Выберите время ожидания, повторная попытка
[0121/06/01 13:08:01][0000-00000037] recv_d: Выберите время ожидания, повторная попытка
[0121/06/01 13:09:01][0000-00000038] recv_d: Выберите время ожидания, повторная попытка
[0121/06/01 13:10:01][0000-00000039] recv_d: Выберите время ожидания, повторная попытка
[0121/06/01 13:10:01][0000-00000040] wait_for_cmd: исходное получение не равно 8 байтам
[0121/06/01 13:10:01][0000-00000041] канал сломан на выходе

Извините, не знаю. Похоже, он создает клиентские подключения, но не уверен, что делать.
Когда вы говорите, что он получает видеоданные, я предполагаю, что они поступают через порт. Базе данных потребуется другой. Я предполагаю, что мобильное приложение используется для просмотра видео.
Работает ли какая-то его часть.
Где находится мобильное приложение (интернет или та же сеть).
Это стандартный набор или его собираешь сам?
Rgds
Стив

Читайте также:
Перенос кухни в гостиную

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

Программное обеспечение подключается к туннельному соединению 10.8.0.0, что наводит меня на мысль, что требуется создание какого-то туннеля для захвата всего, что получено из Интернета через порт 9091 от 192.168.1.142, и пересылки его в эти 4 сокета через какой-то динамическая переадресация портов или что-то в этом роде

Я пытался использовать ssh -D 192.168.1.142:9091 -N -f user@10.8.0.0, и я могу подключиться по телнету 192.168.1.142 и подключить приложение, но данные не приходят и не возвращаются.

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

Есть ли инструкция по настройке. Это готовое программное обеспечение и есть ли у него веб-сайт, на который я могу взглянуть.
Rgds
Стив

Это специальное программное обеспечение, созданное человеком, который ушел из компании и не оставил никакой документации.
Он разработан на C++ 32 бита.
Я могу отправить его на вашу электронную почту, которая, как мне кажется, steve@steves-internet-guide.com, так как она довольно маленькая, вместе с тем, как ее запустить (по крайней мере, то немногое, что я знаю)

Эта электронная почта будет работать для Windows или Linux?

Привет, у меня есть вопрос, могу ли я запустить 2 приложения и подключиться к разным IP, но используя один и тот же номер порта (например, 6000)?

Да, вы делаете это, когда подключаетесь к двум разным веб-сайтам, поскольку они оба используют порт 80.
Rgds
Стив

Итак, у меня есть вопрос. Допустим, есть веб-сервер A, на котором размещен веб-сайт, и на этом сервере A открыт порт 443, и допустим, я написал код как часть веб-страницы на этом веб-сайте, и этот код подключается к удаленному серверу B для получения некоторых данных. Может ли сервер A как-то ограничить меня и разрешить подключения только к порту 443 на удаленном сервере B и запретить мне подключаться к любому другому порту на удаленном сервере B? Видели ли вы такое ограничение раньше, и если да, то в чем причина такого ограничения?
спасибо

Не совсем уверен, какое именно ограничение вы имеете в виду, но вы можете ограничить порт назначения и IP-адрес, исходный порт и IP-адрес, если это поможет.
Rgds
Стив

Привет Стив,
Итак, вот сценарий. Веб-сервер A имеет порт 443, открытый для любых входящих запросов. На веб-сервере A размещен веб-сайт, и на одной из страниц этого веб-сайта есть код C#, который выполняет вызовы API к удаленному серверу B. Сетевой администратор веб-сервера A сказал мне, что вызов API C# должен выполняться только на порт 443. удаленного сервера Б.
В настоящее время на удаленном сервере B открыт порт 7093, и он прослушивает любые запросы API на этом порту.
Итак, мои вопросы: –
1. Может ли администратор сети запретить вызовы API на порты, отличные от 443?
2. С чем может быть связано такое ограничение? В конце концов, как ограничение порта назначения может дать вам какое-то преимущество? Порт — это просто номер, который слушает сервер. Пожалуйста помоги.
спасибо

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: