Как обозначается розетка


Обозначение розеток на схемах

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

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

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

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

Руководящие документы

Для того чтобы унифицировать обозначения, используемые в электрических схемах, еще в советское время был принят ГОСТ 21.614-88 «Изображения условные графические электрооборудования и проводок на планах».

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

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

Обозначения элементов открытой установки

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

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

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

Розетки для скрытой электропроводки

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

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

Устройства с повышенной защитой от пыли и влаги

Рассмотренные розетки не отличаются высоким уровнем защиты от проникновения в их корпус твердых предметов, а также влаги. Такие изделия могут применяться во внутренних помещениях, где условия эксплуатации исключают подобные воздействия. Что касается устройств, предназначенных для установки на открытом воздухе или, например, в ванных комнатах, то согласно принятой классификации степень их защиты должна быть ниже IP44 (где первая цифра соответствует уровню защиты от пыли, вторая – от влаги).

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

Выключатели

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

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

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

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

Блоки розеток

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

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

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

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

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

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

Автор

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

Аннотация

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

Розетки

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

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

История

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

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

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

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

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

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

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

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

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

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

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

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

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

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

МПК

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

См. Также

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

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

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

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

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

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

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

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

.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: # принимать подключения извне (клиентский сокет, адрес) = 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 __ini 
.

Коды ошибок сокетов Windows (Winsock2.h) - приложения Win32

WSA_INVALID_HANDLE
6
Указанный дескриптор объекта события недействителен.
Приложение пытается использовать объект события, но указанный дескриптор недействителен.
WSA_NOT_ENOUGH_MEMORY
8
Недостаточно памяти.
Приложение использует функцию сокетов Windows, которая напрямую сопоставляется с функцией Windows. Функция Windows указывает на нехватку необходимых ресурсов памяти.
WSA_INVALID_PARAMETER
87
Один или несколько параметров недействительны.
Приложение использует функцию сокетов Windows, которая напрямую отображается на функцию Windows. Функция Windows указывает на проблему с одним или несколькими параметрами.
WSA_OPERATION_ABORTED
995
Операция с перекрытием прервана.
Перекрывающаяся операция была отменена из-за закрытия сокета или выполнения команды SIO_FLUSH в WSAIoctl .
WSA_IO_INCOMPLETE
996
Объект события перекрытия ввода-вывода не в состоянии сигнализации.
Приложение попыталось определить статус перекрывающейся операции, которая еще не завершена. Приложения, использующие WSAGetOverlappedResult (с флагом fWait , установленным на FALSE ) в режиме опроса, чтобы определить, когда завершилась перекрывающаяся операция, получают этот код ошибки, пока операция не будет завершена.
WSA_IO_PENDING
997
Перекрывающиеся операции завершатся позже.
Приложение инициировало перекрывающуюся операцию, которая не может быть завершена немедленно. Индикация завершения будет дана позже, когда операция будет завершена.
WSAEINTR
10004
Прерванный вызов функции.
Операция блокировки была прервана вызовом WSACancelBlockingCall.
WSAEBADF
10009
Недействительный дескриптор файла.
Указанный дескриптор файла недействителен.
WSAEACCES
10013
В разрешении отказано.
Была сделана попытка получить доступ к сокету способом, запрещенным его разрешениями на доступ. Примером является использование широковещательного адреса для sendto без разрешения широковещательной передачи, установленного с помощью setsockopt (SO_BROADCAST).
Другая возможная причина ошибки WSAEACCES заключается в том, что при вызове функции bind (в Windows NT 4.0 с SP4 и более поздними версиями) другое приложение, служба или драйвер режима ядра привязаны к тому же адресу с монопольным доступом. Такой монопольный доступ является новой функцией Windows NT 4.0 с пакетом обновления 4 (SP4) и более поздних версий и реализуется с помощью параметра SO_EXCLUSIVEADDRUSE.
WSAEFAULT
10014
Неверный адрес.
Система обнаружила недопустимый адрес указателя при попытке использовать аргумент указателя вызова.Эта ошибка возникает, если приложение передает недопустимое значение указателя или если длина буфера слишком мала. Например, если длина аргумента, представляющего собой структуру sockaddr, меньше, чем sizeof (sockaddr).
WSAEINVAL
10022
Неверный аргумент.
Был предоставлен недопустимый аргумент (например, указание недопустимого уровня для функции setsockopt ).В некоторых случаях это также относится к текущему состоянию сокета - например, вызов принимает на сокете, который не прослушивает.
WSAEMFILE
10024
Слишком много открытых файлов.
Слишком много открытых розеток. Каждая реализация может иметь максимальное количество доступных дескрипторов сокетов глобально, для каждого процесса или для каждого потока.
WSAEWOULDBLOCK
10035
Ресурс временно недоступен.
Эта ошибка возвращается при операциях с неблокирующими сокетами, которые не могут быть выполнены немедленно, например recv , когда нет данных в очереди для чтения из сокета. Это нефатальная ошибка, и операцию следует повторить позже. Сообщение о WSAEWOULDBLOCK в результате вызова connect на неблокирующем сокете SOCK_STREAM является нормальным, поскольку для установления соединения должно пройти некоторое время.
WSAEINPROGRESS
10036
Операция в процессе.
В данный момент выполняется операция блокировки. Windows Sockets допускает выполнение только одной блокирующей операции - для задачи или потока - и при вызове какой-либо другой функции (независимо от того, ссылается ли она на этот или любой другой сокет) функция завершается с ошибкой WSAEINPROGRESS.
WSAEALREADY
10037
Операция уже выполняется.
Была предпринята попытка выполнить операцию на неблокирующем сокете с уже выполняющейся операцией, то есть повторный вызов connect на неблокирующем сокете, который уже подключается, или отмена асинхронного запроса ( WSAAsyncGetXbyY ), который уже был отменен или завершен.
WSAENOTSOCK
10038
Операция сокета на несокете.
Произведена попытка выполнения операции с чем-то, кроме сокета. Либо параметр дескриптора сокета не ссылался на допустимый сокет, либо для выберите , член fd_set был недопустимым.
WSAEDESTADDRREQ
10039
Требуется адрес назначения.
Требуемый адрес был пропущен при операции с сокетом. Например, эта ошибка возвращается, если вызывается sendto с удаленным адресом ADDR_ANY.
WSAEMSGSIZE
10040
Сообщение слишком длинное.
Сообщение, отправленное в сокет дейтаграммы, было больше, чем внутренний буфер сообщений или какой-либо другой сетевой предел, или буфер, используемый для приема дейтаграммы, был меньше, чем сама дейтаграмма.
WSAEPROTOTYPE
10041
Протокол неправильного типа для розетки.
В вызове функции socket был указан протокол, который не поддерживает семантику запрошенного типа сокета. Например, протокол ARPA Internet UDP нельзя указать с типом сокета SOCK_STREAM.
WSAENOPROTOOPT
10042
Неверная опция протокола.
В вызове getsockopt или setsockopt указан неизвестный, недопустимый или неподдерживаемый параметр или уровень.
WSAEPROTONOSUPPORT
10043
Протокол не поддерживается.
Запрошенный протокол не был настроен в системе или для него не существует реализации. Например, вызов сокета запрашивает сокет SOCK_DGRAM, но указывает протокол потока.
WSAESOCKTNOSUPPORT
10044
Тип разъема не поддерживается.
Поддержка указанного типа сокета не существует в этом семействе адресов. Например, необязательный тип SOCK_RAW может быть выбран в вызове socket , а реализация вообще не поддерживает сокеты SOCK_RAW.
WSAEOPNOTSUPP
10045
Операция не поддерживается.
Предпринятая операция не поддерживается для указанного типа объекта. Обычно это происходит, когда дескриптор сокета для сокета, который не может поддерживать эту операцию, пытается принять соединение с сокетом дейтаграммы.
WSAEPFNOSUPPORT
10046
Семейство протоколов не поддерживается.
Семейство протоколов не было настроено в системе или для него не существует реализации.Это сообщение имеет несколько иное значение, чем WSAEAFNOSUPPORT. Однако в большинстве случаев он является взаимозаменяемым, и все функции Windows Sockets, возвращающие одно из этих сообщений, также указывают WSAEAFNOSUPPORT.
WSAEAFNOSUPPORT
10047
Семейство адресов не поддерживается семейством протоколов.
Использован адрес, несовместимый с запрошенным протоколом. Все сокеты создаются со связанным семейством адресов (то есть AF_INET для Интернет-протоколов) и общим типом протокола (то есть SOCK_STREAM).Эта ошибка возвращается, если неправильный протокол явно запрашивается в вызове сокета или если для сокета используется адрес неправильного семейства, например, в sendto .
WSAEADDRINUSE
10048
Адрес уже используется.
Обычно разрешается только одно использование каждого адреса сокета (протокола / IP-адреса / порта). Эта ошибка возникает, если приложение пытается связать сокет с IP-адресом / портом, который уже использовался для существующего сокета, или сокет, который не был закрыт должным образом, или тот, который все еще находится в процессе закрытия.Для серверных приложений, которым необходимо привязать несколько сокетов к одному и тому же номеру порта, рассмотрите возможность использования setsockopt (SO_REUSEADDR). Клиентским приложениям обычно не требуется вызывать bind - connect автоматически выбирает неиспользуемый порт. Когда bind вызывается с подстановочным адресом (включая ADDR_ANY), ошибка WSAEADDRINUSE может быть отложена до тех пор, пока не будет зафиксирован конкретный адрес. Это может произойти с вызовом другой функции позже, включая connect , listen , WSAConnect или WSAJoinLeaf .
WSAEADDRNOTAVAIL
10049
Невозможно назначить запрошенный адрес.
Запрошенный адрес недействителен в своем контексте. Обычно это происходит в результате попытки привязать к адресу, недопустимому для локального компьютера. Это также может быть результатом connect , sendto , WSAConnect , WSAJoinLeaf или WSASendTo , когда удаленный адрес или порт недействителен для удаленного компьютера (например, адрес или порт 0).
WSAENETDOWN
10050
Сеть не работает.
Операция сокета обнаружила неработающую сеть. Это может указывать на серьезный сбой сетевой системы (то есть стека протоколов, через который работает DLL Windows Sockets), сетевого интерфейса или самой локальной сети.
WSAENETUNREACH
10051
Сеть недоступна.
Попытка выполнить операцию сокета в недоступной сети. Обычно это означает, что локальное программное обеспечение не знает маршрута для достижения удаленного хоста.
WSAENETRESET
10052
Сеть разорвала соединение при сбросе.
Соединение было прервано из-за активности проверки активности, обнаружившей сбой во время выполнения операции. Он также может быть возвращен setsockopt , если была сделана попытка установить SO_KEEPALIVE для соединения, которое уже не удалось.
WSAECONNABORTED
10053
Программное обеспечение вызвало разрыв соединения.
Установленное соединение было прервано программным обеспечением на вашем главном компьютере, возможно, из-за тайм-аута передачи данных или ошибки протокола.
WSAECONNRESET
10054
Сброс соединения одноранговым узлом.
Существующее соединение было принудительно закрыто удаленным хостом. Обычно это происходит, если одноранговое приложение на удаленном узле внезапно останавливается, узел перезагружается, узел или удаленный сетевой интерфейс отключен или удаленный узел использует жесткое закрытие (см. setsockopt для получения дополнительной информации о параметре SO_LINGER на удаленный сокет). Эта ошибка также может возникнуть, если соединение было прервано из-за активности проверки активности, обнаружившей сбой во время выполнения одной или нескольких операций.Выполняемые операции завершаются ошибкой WSAENETRESET. Последующие операции завершаются ошибкой WSAECONNRESET.
WSAENOBUFS
10055
Нет доступного буферного пространства.
Операция с сокетом не может быть выполнена из-за недостатка в системе достаточного буферного пространства или из-за переполнения очереди.
WSAEISCONN
10056
Розетка уже подключена.
Запрос на соединение был сделан на уже подключенном сокете. Некоторые реализации также возвращают эту ошибку, если sendto вызывается на подключенном сокете SOCK_DGRAM (для сокетов SOCK_STREAM параметр в sendto игнорируется), хотя в других реализациях это считается допустимым.
WSAENOTCONN
10057
Розетка не подключена.
Запрос на отправку или получение данных был запрещен, поскольку сокет не подключен и (при отправке через сокет дейтаграммы с использованием sendto ) адрес не был указан. Любой другой тип операции также может вернуть эту ошибку - например, setsockopt устанавливает SO_KEEPALIVE , если соединение было сброшено.
WSAESHUTDOWN
10058
Не удается отправить после выключения сокета.
Запрос на отправку или получение данных был запрещен, поскольку сокет уже был отключен в этом направлении с помощью предыдущего вызова shutdown . При вызове shutdown запрашивается частичное закрытие сокета, что является сигналом о том, что отправка или получение, или оба были прекращены.
WSAETOOMANYREFS
10059
Слишком много ссылок.
Слишком много ссылок на некоторый объект ядра.
WSAETIMEDOUT
10060
Истекло время ожидания соединения.
Попытка подключения не удалась, потому что подключенная сторона не ответила должным образом по прошествии определенного периода времени, или установленное соединение не удалось, потому что подключенный хост не ответил.
WSAECONNREFUSED
10061
В соединении отказано.
Невозможно установить соединение, поскольку целевой компьютер активно отказался от него. Обычно это происходит в результате попытки подключиться к службе, которая неактивна на внешнем хосте, то есть к службе, на которой не запущено серверное приложение.
WSAELOOP
10062
Невозможно перевести имя.
Невозможно перевести имя.
WSAENAMETOOLONG
10063
Слишком длинное имя.
Компонент имени или имя слишком длинное.
WSAEHOSTDOWN
10064
Хост не работает.
Операция сокета завершилась неудачно, так как целевой хост не работает. Операция сокета обнаружила мертвый хост. Сетевая активность на локальном хосте не инициирована. На эти условия чаще всего указывает ошибка WSAETIMEDOUT.
WSAEHOSTUNREACH
10065
Нет маршрута к хосту.
Попытка выполнить операцию сокета на недоступном хосте. См. WSAENETUNREACH.
WSAENOTEMPTY
10066
Справочник не пустой.
Невозможно удалить каталог, который не пуст.
WSAEPROCLIM
10067
Слишком много процессов.
Реализация сокетов Windows может иметь ограничение на количество приложений, которые могут использовать ее одновременно. WSAStartup может выйти из строя с этой ошибкой, если предел был достигнут.
WSAEUSERS
10068
Превышена квота пользователя.
Квота исчерпана.
WSAEDQUOT
10069
Превышена квота на диск.
Закончилась дисковая квота.
WSAESTALE
10070
Ссылка на дескриптор устаревшего файла.
Ссылка на дескриптор файла больше не доступна.
WSAEREMOTE
10071
Товар удаленный.
Товара нет в наличии.
WSASYSNOTREADY
10091
Сетевая подсистема недоступна.
Эта ошибка возвращается WSAStartup , если реализация Windows Sockets не может работать в это время, потому что базовая система, которую она использует для предоставления сетевых служб, в настоящее время недоступна. Пользователи должны проверить:
  • Соответствующий файл DLL Windows Sockets находится по текущему пути.
  • Что они не пытаются использовать одновременно более одной реализации сокетов Windows. Если в вашей системе более одной DLL Winsock, убедитесь, что первая в пути соответствует загруженной в данный момент сетевой подсистеме.
  • Документация по реализации сокетов Windows, чтобы убедиться, что все необходимые компоненты в настоящее время установлены и настроены правильно.
WSAVERNOTSUPPORTED
10092
Версия Winsock.dll вне допустимого диапазона.
Текущая реализация Windows Sockets не поддерживает версию спецификации Windows Sockets, запрошенную приложением. Убедитесь, что нет доступа к старым DLL-файлам Windows Sockets.
WSANOTINITIALISED
10093
Успешный запуск WSAS еще не выполнен.
Либо приложение не вызвало WSAStartup , либо WSAStartup завершился неудачно. Приложение может обращаться к сокету, которым текущая активная задача не владеет (то есть пытается совместно использовать сокет между задачами), или WSACleanup был вызван слишком много раз.
WSAEDISCON
10101
Выполняется плавное завершение работы.
Возвращается WSARecv и WSARecvFrom , чтобы указать, что удаленная сторона инициировала последовательность постепенного завершения работы.
WSAENOMORE
10102
Результатов больше нет.
Функция WSALookupServiceNext не может вернуть больше результатов.
WSA ОТМЕНЕН
10103
Вызов был отменен.
Вызов функции WSALookupServiceEnd был сделан, когда этот вызов все еще обрабатывался. Звонок был отменен.
WSAEINVALIDPROCTABLE
10104
Таблица вызова процедур недействительна.
Неверная таблица вызовов процедур поставщика услуг. Поставщик услуг вернул фиктивную таблицу процедур в Ws2_32.dll. Обычно это вызвано тем, что один или несколько указателей функций имеют значение NULL .
WSAEINVALIDPROVIDER
10105
Недействительный поставщик услуг.
Запрошенный поставщик услуг недействителен. Эта ошибка возвращается функциями WSCGetProviderInfo и WSCGetProviderInfo32 , если указанная запись протокола не может быть найдена.Эта ошибка также возвращается, если поставщик услуг вернул номер версии, отличный от 2.0.
WSAEPROVIDERFAILEDINIT
10106
Поставщику услуг не удалось инициализировать.
Запрошенный поставщик услуг не может быть загружен или инициализирован. Эта ошибка возвращается, если не удалось загрузить DLL поставщика услуг (сбой LoadLibrary ) или сбой функции поставщика WSPStartup или NSPStartup .
WSASYSCALLFAILURE
10107
Сбой системного вызова.
Системный вызов, который не должен давать сбоев, завершился ошибкой. Это общий код ошибки, возвращаемый при различных условиях.
Возвращается, когда системный вызов, который никогда не должен давать сбоев, терпит неудачу. Например, если вызов WaitForMultipleEvents завершается неудачно или одна из функций реестра не может управлять каталогами протоколов / пространств имен.
Возвращается, когда поставщик не возвращает УСПЕХ и не предоставляет расширенный код ошибки. Может указывать на ошибку реализации поставщика услуг.
WSASERVICE_NOT_FOUND
10108
Сервис не найден.
Нет такой услуги. Сервис не может быть найден в указанном пространстве имен.
WSATYPE_NOT_FOUND
10109
Тип класса не найден.
Указанный класс не найден.
WSA_E_NO_MORE
10110
Результатов больше нет.
Функция WSALookupServiceNext не может вернуть больше результатов.
WSA_E_CANCELLED
10111
Вызов был отменен.
Вызов функции WSALookupServiceEnd был сделан, когда этот вызов все еще обрабатывался.Звонок был отменен.
WSAEREFUSED
10112
Запрос базы данных отклонен.
Запрос к базе данных завершился неудачно, поскольку он был активно отклонен.
WSAHOST_NOT_FOUND
11001
Хост не найден.
Такой хост не известен. Имя не является официальным именем хоста или псевдонимом, или его нельзя найти в запрашиваемых базах данных.Эта ошибка также может возвращаться для запросов протокола и служб и означает, что указанное имя не может быть найдено в соответствующей базе данных.
WSATRY_AGAIN
11002
Неавторизованный хост не найден.
Обычно это временная ошибка во время разрешения имени хоста и означает, что локальный сервер не получил ответа от полномочного сервера. Повторная попытка через некоторое время может быть успешной.
WSANO_RECOVERY
11003
Это неустранимая ошибка.
Это указывает на то, что во время поиска в базе данных произошла какая-то неисправимая ошибка. Это может быть связано с тем, что файлы базы данных (например, BSD-совместимые файлы HOSTS, SERVICES или PROTOCOLS) не могут быть найдены, или сервер возвращает DNS-запрос с серьезной ошибкой.
WSANO_DATA
11004
Действительное имя, запись данных запрошенного типа отсутствует.
Запрошенное имя допустимо и было найдено в базе данных, но для него нет правильных связанных данных, для которых выполняется разрешение. Обычным примером для этого является попытка трансляции имени хоста в адрес (с использованием gethostbyname или WSAAsyncGetHostByName ), которая использует DNS (сервер доменных имен). Возвращается запись MX, но нет записи A, что указывает на то, что сам хост существует, но не доступен напрямую.
WSA_QOS_RECEIVERS
11005
Приемники QoS.
Получен по крайней мере один резерв QoS.
WSA_QOS_SENDERS
11006
отправителей QoS.
Получен по крайней мере один путь отправки QoS.
WSA_QOS_NO_SENDERS
11007
Нет отправителей QoS.
Нет отправителей QoS.
WSA_QOS_NO_RECEIVERS
11008
QoS нет приемников.
Нет приемников QoS.
WSA_QOS_REQUEST_CONFIRMED
11009
Запрос QoS подтвержден.
Запрос резервирования QoS подтвержден.
WSA_QOS_ADMISSION_FAILURE
11010
Ошибка допуска QoS.
Произошла ошибка QoS из-за нехватки ресурсов.
WSA_QOS_POLICY_FAILURE
11011
Сбой политики QoS.
Запрос QoS был отклонен, поскольку система политики не смогла выделить запрошенный ресурс в рамках существующей политики.
WSA_QOS_BAD_STYLE
11012
Плохой стиль QoS.
Обнаружен неизвестный или конфликтующий стиль QoS.
WSA_QOS_BAD_OBJECT
11013
Плохой объект QoS.
Возникла проблема с некоторой частью спецификации фильтра или буфера конкретного поставщика в целом.
WSA_QOS_TRAFFIC_CTRL_ERROR
11014
Ошибка управления трафиком QoS.
Ошибка базового API управления трафиком (TC), поскольку общий запрос QoS был преобразован для локального применения с помощью TC API.Это могло произойти из-за ошибки нехватки памяти или внутренней ошибки поставщика QoS.
WSA_QOS_GENERIC_ERROR
11015
Общая ошибка QoS.
Общая ошибка QoS.
WSA_QOS_ESERVICETYPE
11016
Ошибка типа службы QoS.
В спецификации потока QoS обнаружен недопустимый или нераспознанный тип службы.
WSA_QOS_EFLOWSPEC
11017
Ошибка спецификации потока QoS.
В структуре QOS обнаружен недопустимый или несогласованный спецификация потока.
WSA_QOS_EPROVSPECBUF
11018
Неверный буфер поставщика QoS.
Неверный буфер, зависящий от поставщика QoS.
WSA_QOS_EFILTERSTYLE
11019
Неверный стиль фильтра QoS.
Использован недопустимый стиль фильтра QoS.
WSA_QOS_EFILTERTYPE
11020
Неверный тип фильтра QoS.
Использован недопустимый тип фильтра QoS.
WSA_QOS_EFILTERCOUNT
11021
Неверное количество фильтров QoS.
В FLOWDESCRIPTOR указано неправильное количество QoS FILTERSPEC.
WSA_QOS_EOBJLENGTH
11022
Неверная длина объекта QoS.
В буфере, зависящем от поставщика QoS, указан объект с недопустимым полем ObjectLength.
WSA_QOS_EFLOWCOUNT
11023
Неверный счетчик потока QoS.
В структуре QoS указано неправильное количество дескрипторов потока.
WSA_QOS_EUNKOWNPSOBJ
11024
Неизвестный объект QoS.
В буфере, зависящем от поставщика QoS, обнаружен нераспознанный объект.
WSA_QOS_EPOLICYOBJ
11025
Недействительный объект политики QoS.
В буфере поставщика QoS обнаружен недопустимый объект политики.
WSA_QOS_EFLOWDESC
11026
Неверный дескриптор потока QoS.
В списке дескрипторов потока обнаружен недопустимый дескриптор потока QoS.
WSA_QOS_EPSFLOWSPEC
11027
Недопустимая спецификация потока, зависящая от поставщика QoS.
В буфере, зависящем от поставщика QoS, обнаружена недопустимая или несогласованная спецификация потока.
WSA_QOS_EPSFILTERSPEC
11028
Недопустимая спецификация фильтров для конкретного поставщика QoS.
В буфере, зависящем от поставщика QoS, обнаружен недопустимый FILTERSPEC.
WSA_QOS_ESDMODEOBJ
11029
Недопустимый объект режима сброса формы QoS.
В буфере, зависящем от поставщика QoS, обнаружен недопустимый объект режима сброса формы.
WSA_QOS_ESHAPERATEOBJ
11030
Недопустимый объект скорости формирования QoS.
В буфере, зависящем от поставщика QoS, обнаружен недопустимый объект скорости формирования.
WSA_QOS_RESERVED_PETYPE
11031
Зарезервированный тип элемента QoS политики.
Зарезервированный элемент политики обнаружен в буфере, зависящем от поставщика QoS.
.Сокет

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

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


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

Примечание

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

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

См. Также

Модуль socketserver

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

Module ssl

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.

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