Розеточные блоки выдвижные, настольные, в столешницу
Блоки для установки механизмов электропитания (розеточные комплексы) накладного и скрытого монтажа
Несмотря на то, что организационная офисная техника и домашняя всеобщая телевизация и компьютеризация заставляет человека потесниться, занимая все больший объем помещения, и расставляя хитроумные петельные ловушки удлинителей, выход есть.
Компании, занимающиеся производством кабельного оборудования, придумывают все более оригинальные конструкции для проводниковой закладки и установки механизмов электропитания. Все более популярными у пользователей становятся розеточные блоки, установленные на предметы мебели. Чаще всего, таковыми являются рабочие столы.
Производители предлагают установочные блоки накладного и скрытого монтажа. Наиболее актуальными, с точки зрения эстетического дизайна являются силовые и информационные розеточные комплексы, встроенные заподлицо со столешницей, и выдвижные цилиндрические блоки.
Конструкции любого типа устанавливаются с минимальными затратами времени, сил и профессиональных знаний. Блоки укомплектовываются адаптерами, рамками, зажимами, суппортами и струбцинами с подробной инструкцией по порядку сборки и инсталляции электрических механизмов.
В нашем магазине, вы найдете блоки для модульных разъемов от отечественных и зарубежных производителей, в том числе, от таких известных европейских брендов, как испанская компания Simon и французская корпорация Legrand. Наверняка, вам будут интересны модели российской компании Ecoplast. Последние, нимало не уступая в качестве именитым конкурентам, выделяются невысоким ценовым порогом.
Почти все розеточные блоки выполнены в размерах 45х45мм, что соответствует «французскому» стандарту и позволяет увеличить максимальное число модулей в приемнике устройства. Хотя, сам родоначальник «французской» моды, компания Legrand, предлагает вариант для розеток «немецкого» стандарта, с возможностью установки компактных механизмов (45х45) с использованием специальных адаптеров.
Настольные (выдвижные, накладные, встроенные блоки) эффективны для любых видов напольной проводки в кабельных каналах и закладки проводников в пол. На первый взгляд небольшая модульная вместимость (особенно у выдвижных блоков) компенсируется беспрепятственным подводом к каждому рабочему месту. Ни подводка кабеля, ни сама конструкция не создает помех для передвижения людей внутри помещения.
Если у вас возникли вопросы по любому пункту, касающегося комплектации товара и оформления заказа, звоните нашим специалистам и получите подробную консультацию.
Встраиваемые розетки EVOline от SHULTE
Инновационное решение скрытой подводки электрической сети
Эксклюзивное оснащение рабочего места на кухне, в рабочем кабинете, в офисе, переговорной
Перейти в интернет магазин Купить
NEW
С новыми технологиями Qi Вам нет необходимости использовать штатные проводные зарядные устройства – достаточно просто положить Ваш гаджет на крышку розетки EVOline Square80 с Qi-зарядкой от компании SHULTE и устройство само начнет заряжаться. Вам не надо беспокоиться о точном центрировании при установке Qi-совместимого устройства на розетке EVOline Square80 с Qi-зарядкой, в ней поддерживаются индуктивный и резонансный способы зарядки. Просто поместите свой телефон или гаджет на поверхность крышки розетки EVOline Square80 с Qi-зарядкой экраном вверх и она сразу начнет заряжать аккумулятор. Эффективность зарядки в розетке приближается к стандартной (проводной), а время зарядки занимает, примерно, столько же времени, при этом поддерживается функция энергосбережения — когда устройство полностью заряжено, зарядка отключается, чтобы экономить энергию.
Применение : На кухне, в конференц-залах, офисах.
Сдвиньте крышку в сторону и в зависимости от модели розетки EVOline® Square80 с Qi-зарядкой и Вы сможете:
— подключить ноутбук или другой электрический прибор в розетку с заземлением
— воспользоваться USB гнездом для зарядки MP3-Player, Apple Produkte (iPhone, iPad) и т. д.
— подключить интернет кабель или телефон в гнездо RJ45
— вытащить кабель RJ45 (кабель 3м) для подключения его к Вашему ноутбуку
В духе последних дизайнерских тенденций встраиваемые розетки устанавливается в один уровень со столешницей, не нарушая единого рабочего пространства. В розеточных блоках EVOline FlipTop Push доступ к разъёмам открывается нажатием на крышку блока
— Крышка изготовлена из высококачественной нержавеющей стали
— Эксклюзивный дизайн для интерьеров как в стиле High End, так и классических
— Удобное коммутирование – крышка открывается на 60°
— В закрытом положении крышка оставляет зазор для пропуска кабелей подключенных приборов
— Волосяная шторка прикрывает зазор, защищая розетки от пыли, мусора и случайных капель
— Толщина столешницы до 50 мм
— Безопасный профиль из плотного пластика обрамляет корпус выполненный из нержавеющей стали матовой полировки.
— Легкий монтаж – просто вырезать отверстие и прикрепить поворотный блок EVOline BackFlip , кабель спрятан под столешницей и не каких проводов на виду.
— Элегантная крышка прячет гнезда от загрязнений и попадания пыли и влаги.
— Простая эксплуатация – просто нажать на крышку и блок самостоятельно повернется для рабочего состояния и также обратно повернуть до закрытого положения и защелкнуть.
— Две розетки + Встраиваемый модуль для подзарядки всех типов USB устройств: мобильные телефоны, mp3-плееры, IPhone, IPad, видео и др. электронные устройства (2эл. розетки, 2 USB входа.
— Для установки в столешницы толщиной до 40 мм.
— Розетки с заземлением 16А 220В
С
С
С
В кухнях часто есть неиспользуемое пространство. Розеточный модуль EVOline V-Port специально задуман для вертикальной установки в углы или под верхними кухонными шкафами. Его можно установить не только в дно верхнего шкафа или на боковую стенку пенала, но и просто закрепить к стене.
В закрытом положении розеточный модуль V-port утапливается и прячется в экран защитного корпуса из нержавеющей стали с матовой полировкой. Для открытия розеточного блока нужно просто нажать на дно выдвижного модуля и блок с гнездами плавно выезжает из защитного корпуса.
Элегантное и функциональное оснащение рабочего места на кухне или в офисе. Компактная эргономичная конструкция
Устанавливается стационарно в угол под полкой или над столешницей. При оборудовании офиса перегородками часто устанавливается вертикально в месте их стыковки
— Электрические розетки с заземлением 16А 220В
— Подвод кабеля осуществляется сбоку либо снизу
— Крепится к панели стационарно. Очень легкий монтаж
— Алюминиевый профиль с серебристым покрытием
Накладная розетка для размещения по горизонтали с углом 90 °. R-Dock помещается везде где есть угол 90 °. Благодаря плоской задней панели и наклону передней, он очень удобен и прост в использовании. Идеален для размещения на кухне, в гостиной, а также в офисах. Два EVOline R-Dock можно разместить на любой плоской поверхности, совместив задние панели так вы обеспечите два рабочих места.
100мм и 150мм к столу 18 — 32 мм. В комплекте 1 кронштейн для связи с WireLane EVOline. Для блоков EVOline Dock, EVOline R-Dock
Врезные накладные розетки EVOline Frame Dock
Многовариантное использование в столешницы, мебель или в полости стен. Эксклюзивный дизайн. Устанавливается в полость стены или плиты с толщиной стенки 5-38 мм. Минимальная высота рамки и цветовое сочетание позволяет использовать эти розетки практически в любом дизайне.
Незаменимый элемент для подключения приборов к розеткам,находящимся в труднодоступных местах!
— Толщина корпуса всего 5 мм
— Элегантное оригинальное решение проблемы ограниченного пространства. Позволяет придвигать мебель практически вплотную к стене
— Подвижный контакт на шарнире облегчает вынимание вилки из розетки. Она как бы выталкивается из гнезда.
— Эргономичный корпус с ручкой-рычагом обеспечивает легкое пользование даже пожилым людям.
— В 2-х цветах на выбор: черный, белый
Комплектация:
Электрическая вилка с заземлением 16А, 250В
Для провода сечением 0,75-1,5мм2
Встроенные выдвижные розетки Evoline Port
Нажмите на углубление, потяните за крышку и вытяните розетку,
подсоедините кабель и задвиньте розетку обратно.
Между крышкой и панелью останется пространство для свободного прохода кабеля
— Выдвижной блок из алюминиевого профиля комплектуется актуальным набором разъемов для подключения к электрическим, компьютерным, телефонным сетям, аудио и видео выходами
— Цвета алюминиевого профиля: серебристый, античная бронза
— Некоторые модели имеют функцию ночной подсветки. Мягкая подсветка от 6-ти светодиодов, расположенных под крышкой. Цвета подсветки: голубой, рубиновый (только для исполнения «античная бронза»)
Крышка может быть изготовлена из пластика (стандартные цвета: черный, серебристый, античная бронза) или из нержавеющей стали. На заказ возможно исполнение в любом цвете RAL
Evoline Dock Модульные блоки розеток с креплением к столешнице на опоры
Порядок и безопасность на рабочем столе. Используются ведущими мировыми компаниями. Может легко переставляться по мере необходимости. На выбор несколько стандартных комплектаций электрическими розетками и разъемами для телефона и компьютера
— Электрические розетки с заземлением 16А 220В
— Крепится к столешнице толщиной от 8 до 40мм на струбцину
— Нет необходимости делать отверстие в столешнице под крепление
Evoline T-Dock Блок с 2-мя электрическими розетками для островной кухни
Инновационное решение скрытой подводки электрической сети
Эксклюзивный дизайн для кухонь как в стиле High End, так и классических
Оригинальная идея
Компактный блок с 2-мя электрическими розетками. Из анодированного алюминиевого профиля с серебристым покрытием и полированной нержавеющей стали
— Электрические розетки с заземлением 16А 220В
— Толщина столешницы до 50мм
— Очень легкий монтаж
С
С
С
Встраиваемые в столешницу врезные розетки EVOline FlipTop
В духе последних дизайнерских тенденций встраиваемые розетки устанавливается в один уровень со столешницей, не нарушая единого рабочего пространства.
Крышка изготовлена из высококачественной нержавеющей стали
— Эксклюзивный дизайн для интерьеров как в стиле High End, так и классических
— Удобное коммутирование – крышка открывается на 60°
— В закрытом положении крышка оставляет зазор для пропуска кабелей подключенных приборов
— Упругая резиновая шторка прикрывает зазор, защищая розетки от пыли, мусора и случайных капель
Комплектация:
EVOline FlipTop CUISINE арт. 934.20.001
Крышка из высококачественной нержавеющей стали, корпус из анодированного алюминия серебристого цвета, 4 электрические розетки – черный пластик, кабель 2,5м, штепсельная вилка (отдельно от кабеля) устанавливается по месту
EVOline FlipTop DATA арт. 934.20.002
Крышка из высококачественной нержавеющей стали, корпус из анодированного алюминия серебристого цвета, 3 электрические розетки + 2 разъема RJ 45, кабель 3 м, штепсельная вилка (отдельно от кабеля) устанавливается по месту
Перейти в интернет магазин Купить
В духе последних дизайнерских тенденций устанавливается в один уровень со столешницей, не нарушая единого рабочего пространства
Выдвижные розетки для кухни: встроенные блоки розеток
Современная кухня изобилует разнообразной бытовой техникой. Для ее комфортного использования необходимо обзавестись достаточным количеством розеток. На этапе ремонта многие задаются вопросом, сколько их должно быть в кухне? Ответ прост, розеток должно быть на 20% больше, чем электроприборов. Такое количество обеспечит бесперебойное функционирование всей необходимой техники, и при этом не придется выдергивать шнур чайника, чтобы включить пылесос или вентилятор. Кроме привычных, установленных на стене вариантов, существуют и другие, например, выдвижные розетки. Такие блоки позволяют включать сразу несколько электроприборов.
Выдвижной блок можно разместить в столешнице, в навесном шкафу или в тумбе. Навесные шкафы считаются более удобным местом для таких розеток. Там они надежно защищаются от влаги, грязи, пара и пыли. В убранном состоянии их практически не видно, блок находится внутри корпуса. Такой вариант является хорошей альтернативой удлинителю, который практически невозможно спрятать. Это особенно актуально в семьях, где есть маленькие дети, для которых розетка, находящаяся в зоне досягаемости, является очень опасной.
Преимущества и недостатки
Выдвижную розетку по-другому называют скрытой или встроенной. Чтобы выдвинуть ее из корпуса шкафа или столешницы, следует нажать на рычаг. Провода также скрыты в мебели, что является несомненным плюсом, так как данные детали трудно назвать эстетически привлекательными. К преимуществам таких розеток относятся:
- универсальность и современный дизайн;
- вертикальное и горизонтальное расположение;
- необходимость в минимальном количестве места;
- в ассортименте имеются водозащищенные, заземленные, и другие виды;
- подойдут для монтажа в любую поверхность, как деревянную, так и из искусственного камня;
- есть варианты с дополнительными гнездами под телефон, интернет, кабельное телевидение и т.д.
Среди минусов можно выделить:
- требуют специально отведенного места в столешнице или шкафу;
- не подходят для тумб с ящиками;
- высокая цена;
- возможность деформации со временем.
Встроенные розетки бывают двух видов: горизонтальные и вертикальные. Первые считаются более практичными и надежными в эксплуатации. Они открываются, если нажать на край крышки. Горизонтальные варианты более стойки перед повреждениями и прослужат дольше. Но в них трудно подключать угловые вилки, только проводом вверх. Вертикальные же выдвигаются из тумбы или шкафа путем нажатия на кнопку.
Чтобы не повредить изделие, при выдергивании вилки лучше придерживать саму розетку рукой.
Совет! Розетка выдвижная обычно предназначается для мелкой бытовой техники, которая не работает постоянно. Это современный и более функциональный вариант удлинителя. Для просторной кухни можно использовать два или три таких блока. Перед ремонтом лучше заранее определиться с месторасположением мебели, техники и розеток, в том числе и выполнить подробный чертеж с размерами.
Особенности монтажа
Установка розеток на кухне требует соблюдения определенных правил. Для встраиваемых бытовых приборов наиболее удобным местом размещения розеток будут соседние тумбы. Расстояние от пола может быть примерно от 30 до 600 мм. Причем, их следует располагать в радиусе одного метра к нужной технике. Для небольших приборов, таких как чайник, кофеварка, тостер и т.д. розетки должны находиться в зоне фартука.
В монтаже выдвижных розеток также нет ничего сложного. С процессом вполне можно справиться самостоятельно, если не пренебрегать инструкцией. Прежде всего, следует просверлить в столешнице круглое отверстие нужного диаметра, который зависит от размеров блока (для вертикальной модели). Далее, необходимо вставить сам блок в получившееся отверстие и закрепить гайкой. Затем, следует присоединить розетку к линии электропроводки. Если провод слишком длинный, то его можно спрятать в корпусе тумбы. Монтаж в навесной шкаф производится по той же схеме, только снизу вверх. Чтобы установить горизонтальную модель, следует вырезать в столешнице прямоугольное отверстие.
Что нужно знать о подключении:
- Все гнезда встроенного блока подключены параллельно. Это необходимо знать при расчете допустимой нагрузки.
- Столешница должна быть толщиной от 25 до 52 мм.
- Лучше всего подключать встроенные розетки к отдельной линии электропитания.
Критерии выбора и правила эксплуатации
Несмотря на то, что выбор розетки может казаться достаточно простым делом, здесь также могут возникнуть некоторые затруднения. Чтобы проще было определиться, следует принять во внимание некоторые советы.
- Стильный дизайн конечно важен, но в первую очередь следует проверить изделие на отсутствие всяческих повреждений, в том числе и у корпуса.
- Для большого количества техники потребуется розетка выдвижная с заземлением.
- В кухнях с повышенной влажностью следует устанавливать розетки, имеющие соответствующую маркировку.
Выдвижная розетка считается универсальной и подходит как для столешниц, так и для навесных шкафчиков.
При монтаже так же следует придерживаться некоторых правил:
- Не стоит устанавливать встраиваемые розетки в районе мойки или плиты. В корпусе тумбы блок надежно защищен от попадания воды, но в выдвинутом состоянии может серьезно пострадать от влаги. Плита так же оказывает негативное воздействие на розетки любого типа, поэтому их лучше монтировать подальше.
- Необходимо следить за подключенной электропроводкой блока. Она не должна подвергаться воздействию высоких температур, зажиматься мебелью или перегибаться.
- Приборы, которые используются регулярно, лучше подключать к обычным розеткам. Также не следует эксплуатировать выдвижную розетку с максимальной нагрузкой, чтобы избежать ее перегревания.
- Вертикальные блоки лучше придерживать рукой при выдергивании или включении вилки.
Выдвижные розетки – удачное дополнение к стационарным вариантам, а также хорошая альтернатива удлинителям. Они подойдут для мелкой бытовой техники, которая не требует постоянного подключения. Внешний вид встраиваемых блоков не может не радовать стильным современным дизайном, а их монтаж совсем прост, с ним может справиться даже новичок.
Встраиваемые розетки для дома и офиса
На сегодняшний день сложно найти жилое или производственное помещение, в котором бы не требовалось подключения различных электроприборов. Однако многочисленные розетки на стенах с расположением тройников и удлинителей значительно нарушают эстетически привлекательные характеристики помещения. Поэтому для того, чтобы скрыть устройства для подключения к источнику электроэнергии, сегодня все чаще стали использоваться встраиваемые розетки для дома и офиса. Купить устройства для подключения к источнику электроэнергии можно в нашей компании.
Встраиваемые розетки для дома
В бытовых условиях встраиваемые розетки помогают избежать протягивания большого количества проводов и позволяют сэкономить полезное пространство. Чаще всего устройства используются на кухне для подсоединения к источнику электроэнергии миксеров, кухонных комбайнов и других бутовых приборов.
Если к источнику электроэнергии необходимо подсоединить сложные электронные устройства, используется встраиваемая розетка с заземлением. Она равномерно распределяет нагрузку на линию и, в то же время отвечает всем условиям эксплуатации электроприборов.
Поскольку современные электроприборы требуют расположения в непосредственной близости к различным предметам мебели, розетки можно легко встроить в мебель, перед этим изучив все эксплуатационные особенности мебели.
Встраиваемые розетки для офиса
Выдвижной розеточный блок позволяет решить проблему подключения к электросети большого количества компьютеров в офисах. Источники электроэнергии позволяют прямо под рукой иметь источник электроэнергии без большого количества соединяющих проводов. Выдвижные розеточные блоки превосходно маскируют источники электроэнергии и позволяют сохранить безупречный стиль интерьера.
Где купить встраиваемые розетки для дома и офиса
В каталоге нашей компании представлен широкий ассортимент выдвижных розеточных блоков. Прежде чем купить встраиваемые розетки для дома и офиса, убедитесь, что изделия подходят для вашего интерьера или конфигурации предметов мебели. Наши устройства существенно повышают комфорт использования бытовых электроприборов. Вместо обычных источников электроэнергии наши клиенты все чаще предпочитают купить встраиваемые розетки для дома и офиса. Оформить заказ и совершить покупку можно прямо в режиме онлайн.
Блок розеток EVOline FlipTop Push 159370024900
Встраиваемый блок розеток EVOline FlipTop Push
EVOline FlipTop Push — — это элегантное встроенное решение для всех рабочих зон. «Выныривающая» розетка открывается нажатием на крышку. Возможен обычный врезной монтаж, а так же установка в один уровень со столешницей.
Требуется лишь одно касание
В закрытом состоянии видна только поверхность крышки FlipTop Push. Одно прикосновение и появляется розеточный блок. После этого сам блок можно легко вытащить. Легким нажатием на крышку розеточный блок снова исчезает под поверхностью — даже при подключенных кабелях.
Быстрый и легкий монтаж
EVOline® FlipTop Push может быть установлен в кратчайшие сроки благодаря хорошо зарекомендовавшим себя монтажным «клиньям». Защелка справа, защелка слева — готово.
Отличный дизайн продукта
EVOline® FlipTop Push получил премию iF Design Award 2016 за эстетику, инновации и безопасность и был номинирован на премию German Design Award.
Комплектация
3 розетки по 16 А, кабель 3 м с вилкой, монтажные распорки 2 шт, адаптер для кабеля 1 шт, крышка и рамка выполнены из нержавеющей стали, модули из черного пластика, ворсистая шторка прикрывает зазор для вывода проводов
youtube.com/embed/4n0JfLt4oeI» title=»EVOline FlipTop Push»/>
Сервис и услуги
Блок розеток EVOline FlipTop Push 159370024900 отвечает самым высоким европейским стандартам качества и сертифицирована для РФ.
Для всех продуктов этого производителя имеется гарантийное обслуживание и качественная сервисная поддержка в вашем городе и/или регионе.
Обратите внимание! К товару прилагается гарантийный талон, в котором указан сервисный центр в вашем городе. Авторизованный сервисный центр указан также на сайте производителя.
Если у вас возникнут вопросы по наличию товара, качеству товара и его отличительным свойствам, по гарантийным срокам, стоимости и срокам доставки, условиям оплаты – обращайтесь к нашим онлайн-консультантам или звоните на бесплатный номер 8-800-350-31-21. Они обязательно помогут вам с выбором и с удовольствием ответят на все ваши вопросы.
Наличие в магазинах:
Склад поставщики, Москва больше 10
доставка 7-14 дней, предоплата 100%
Вопросы и ответы
✅ Фиксированный стол Move 78.
7 Executive со встроенным блоком розетки, втулкой и крышкой для розетки
Возврат и обмен. Гарантия без забот.
Обслуживание клиентов является нашим главным приоритетом. Мы хотим, чтобы вы любили свою новую мебель и были довольны покупкой. Если вы не удовлетворены своей покупкой, вы можете вернуть или обменять ее.
Чтобы завершить возврат и обмен, все, что вам нужно сделать, это связаться с нашей службой поддержки или просто ответить на электронное письмо с подтверждением заказа. Мы выдадим кредит, как только возвращенный товар вернется на склад. Легкий пошаговый возврат
- Сообщите нам в течение 14 дней с момента получения покупки.
- Возврат в оригинальной упаковке (если товар был распакован, упакуйте его обратно в оригинальную упаковку).
- Отправьте товар обратно на склад (мы вышлем вам инструкции с номером возврата «RMA#»).
- Верните деньги.
Подробнее
Мы накладываем некоторые ограничения на нашу политику возврата, но мы считаем, что они справедливы.
Уведомить в течение 14 дней
Мы принимаем все возвраты и обмены в течение 14 дней с момента получения вашей покупки.
Возврат в оригинальной упаковке
Наши продукты хорошо упакованы для транспортировки. Без оригинальной упаковки мы не сможем принять ваш возврат.
Процесс возврата
Товары, возвращенные в течение 14-дневного бесплатного пробного периода, будут проверены в течение 48 часов с момента поступления товаров на наш склад, чтобы убедиться, что они находятся в состоянии как новые. Затем мы обработаем ваш запрос и выдадим кредит на вашу кредитную карту или PayPal в течение одного дня.Вы получите подтверждение по электронной почте после завершения возврата. В зависимости от политики эмитента вашей карты может пройти до 5 рабочих дней после того, как мы выполним возврат средств, прежде чем кредит появится на вашем счету.
Состояние как новое
Это означает, что если вы повредили товар, мы не сможем принять ваш возврат. Кроме того, мы не можем принять возврат уже собранных товаров, если только они не доставлены в предварительно собранном виде.
Индивидуальные заказы и специальные заказы
Обратите внимание, что индивидуальные заказы не подлежат возврату и возврату
Не устраивает цвет?..
Все возвраты, основанные на цвете предмета, проходят один и тот же процесс: «Уведомить в течение 14 дней» + «Возврат в оригинальной упаковке» + «Состояние нового» + «Дополнительные сборы за доставку» применяются, даже если в вашем заказе указано «Бесплатно». Доставка’
Индивидуальные заказы и специальные заказы, основанные на цвете, возврату и возврату не подлежат. (Если вы приняли решение отменить его, мы удержим 20 % платы за пополнение запасов для любого отмененного Специального заказа + «Дополнительные сборы за доставку» будут применяться, даже если в вашем заказе указано «Бесплатная доставка» )
Дополнительные услуги и стоимость доставки
Наши дополнительные услуги и стоимость доставки не подлежат возврату. Сюда входят сборы, уплачиваемые за доставку в номер, услуги по сборке, а также за доставку и самовывоз, даже если в вашем заказе указано «Бесплатная доставка», мы все равно платим транспортным компаниям за эти услуги.
Плата за каждую услугу варьируется от 50 до 250 долларов США. Если у вас есть вопросы, пожалуйста, свяжитесь с нами, прежде чем сделать покупку.
Распродажа, распродажа, товары со скидкой и распродажа
Все распродажи, товары со скидкой и товары, проданные как «Финальная распродажа», не подлежат возврату.
Матрасы
Матрасы возврату и возврату не подлежат.
Аннулирование
Вкратце…
Мы заботимся о каждом нашем покупателе и хотим, чтобы Вы остались довольны своей покупкой. И, если вы недовольны, мы хотим упростить получение возмещения или замены. Мы делаем это, потому что хотели бы этого, если бы были на вашем месте.
Понимание неблокирующего ввода-вывода с помощью Python — часть 1 | Вайдик Капур | Вайдик Капур
Дата: 31 мая 2015 г.
Как человек, работающий с веб-стеком и такими языками, как Python или Ruby, вы, скорее всего, слышали о неблокируемом вводе-выводе.С таким же успехом вы можете использовать его в некоторых своих проектах или попробовать свои силы с такими библиотеками, как Gevent или Tornado. Но как эти библиотеки делают сетевые запросы неблокирующими. Это то, что я всегда задавался вопросом, когда пробовал Gevent. Я просто не мог уложить в голове тот факт, что когда вы отправляете что-то в сокет или получаете от него, он блокирует выполнение как минимум на то время, которое требуется для передачи данных. Итак, как мне сделать возможным выполнение чего-то еще, пока происходит ввод-вывод? Поэтому я начал копаться, пытаясь понять, как сделать некоторые сетевые запросы неблокирующими в Python.
В этой серии статей я постараюсь представить тему и рассказать как можно подробнее.
Итак, сначала давайте посмотрим, что блокирует ? Функция блокируется, если ей нужно дождаться завершения чего-либо. Да, каждая функция блокируется — независимо от того, выполняете ли вы ввод-вывод или выполняете задачу ЦП. Все требует некоторого времени. Если функция выполняет какую-то задачу, которая заставляет процессор работать, то она блокирует возврат функции. Точно так же, если функция пытается что-то получить из базы данных, она будет ждать получения результата и будет блокироваться до тех пор, чтобы продолжить обработку.Но бывает так, что сервер не использует ЦП, ожидая, пока база данных отправит ответ.
Таким образом, если функция блокируется (по каким-либо причинам), она может задержать выполнение других задач. И общий прогресс всей системы может пострадать. Если функция блокируется из-за того, что она выполняет какую-то задачу ЦП, тогда мы мало что можем сделать. Но если он блокируется из-за ввода-вывода, мы знаем, что ЦП простаивает и может использоваться для запуска другой задачи, требующей ЦП.
Давайте посмотрим пример блокировки сетевого запроса. У меня есть очень простой TCP-сервер, написанный на Python:
import socket
import syssock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 1234 if len(sys.argv) == 1 else int (sys.argv[1])
sock.bind(('localhost', порт))
sock.listen(5)try:
while True:
conn, info = sock.accept()data = conn.recv(1024)
в то время как данные:
данные печати
данные = соед.recv(1024)
кроме KeyboardInterrupt:
sock.close
А вот простой клиент для подключения к нашему серверу:
import socketsock = socket.socket(socket.AF_INET, socket. SOCK_STREAM)
sock.connect (('localhost', 1234))data = 'foobar\n' * 10 * 1024 * 1024 # 70 МБ данных
assert sock.send(data) == len(data) # True
Вышеупомянутое код блокируется на длительный период времени. Если был код после последнего раза, он не будет выполнен до тех пор, пока метод send
не вернется.Что здесь происходит? Метод send()
попытается передать все данные, пока буфер записи не заполнится. Ядро поместит процесс в спящий режим до тех пор, пока данные в буфере не будут переданы в место назначения и буфер снова не станет пустым. Когда буфер станет пустым, ядро снова разбудит процесс, чтобы получить следующий блок данных, который должен быть передан. Короче говоря, ваш код заблокируется и больше ничего не позволит продолжить.
Давайте сделаем приведенный выше пример НЕ блочным:
import socketsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 1234))
sock. setblocking(0)data = 'foobar\n' * 10 * 1024 * 1024 # 70 МБ данных
assert sock.send(data) == len(data) # AssertionError
Когда вы запустите указанный выше клиент, вы заметите, что он вообще не блокируется. Но есть проблема с клиентом — он не отправил все данные. метод socket.send
возвращает количество отправленных байтов. Когда вы делаете сокет неблокирующим, вызывая setblocking(0)
, он никогда не будет ждать завершения операции.Поэтому, когда вы вызываете метод send()
, он помещает в буфер как можно больше данных и возвращает результат. Когда это считывается удаленным соединением, данные удаляются из буфера. Если буфер получит полный и мы продолжим отправлять данные, будет поднято socket.error
. Когда вы пытаетесь отправить данных больше, чем может вместить буфер, фактически отправляется только тот объем данных, который может быть размещен, и send()
возвращает количество отправленных байтов. Это полезно, так как мы можем попытаться отправить оставшиеся данные, когда буфер станет пустым. Попробуем добиться этого:
import errno
import select
import socketsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 1234))
sock.setblocking(0 )data = 'foobar\n' * 1024 * 1024
data_size = len(data)
print 'Байт для отправки: ', len(data)total_sent = 0
в то время как len(data):
try:
отправлено = носок.send(data)
total_sent += sent
data = data[sent:]
print 'Отправка данных'
кроме socket.error, e:
if e.errno != errno.EAGAIN:
raise e
print 'Блокировка с ', len(data), 'remaining'
select.select([], [sock], []) # Это блокирует доassert total_sent == data_size # True
В приведенном выше примере мы убеждаемся, что мы продолжаем пытаться отправить оставшиеся данные, пока не отправили все. Когда буфер записи заполнен и не может вместить больше данных, возникает ошибка EAGAIN
с просьбой повторить попытку. Если вы исследуете объект исключения, сообщение об исключении будет «Ресурс временно недоступен». Поэтому мы продолжаем пытаться отправить оставшиеся данные, пока не отправим все.
В последней строке приведенного выше примера представлен модуль select. Модуль select помогает нам работать с несколькими файловыми дескрипторами одновременно. Модуль select включает в себя реализации select
, poll
, epoll
и kqueue
, которые используются такими библиотеками, как Eventlet, Twisted, Tornado и другими.Мы рассмотрим их позже в следующих статьях этой серии. Поскольку мы сделали наш сокет неблокирующим, мы не знаем, когда мы действительно сможем писать в него, если только мы не будем продолжать попытки писать в него и ожидать, что он не выйдет из строя. Это большая трата процессорного времени. В приведенном выше примере мы вызываем функцию select()
, чтобы избежать именно этого.
select()
ожидает три аргумента — список файловых дескрипторов, которые необходимо отслеживать для чтения, список файловых дескрипторов, которые необходимо отслеживать для записи, и список файловых дескрипторов, для которых необходимо отслеживать ошибки. Время ожидания может быть передано как необязательный 4-й аргумент, который можно использовать для предотвращения блокировки select()
на неопределенный срок. Он возвращает подмножество всех трех списков, переданных в том же порядке, т. е. всех файловых дескрипторов, готовых к чтению, записи или вызвавших какую-либо ошибку.
Мы вызываем функцию select()
и передаем ей файловые дескрипторы, прося сообщить нам, какие из них готовы для чтения или записи. В приведенном выше примере select()
блокируется, если нет файлового дескриптора, готового к работе.Вы можете сказать, что это все еще блокирует выполнение нашей программы, но это всего лишь основа для создания лучших вещей. На данный момент select()
будет просто блокироваться до тех пор, пока наш объект sock снова не станет доступным для записи. Если мы удалим эту строку, наш скрипт продолжит работать, но будет гораздо более бесполезным, пока будут выполняться итерации цикла, поскольку большинство из них приведет к исключениям.
Но как на самом деле работает select()
? Что ж, select()
— это не что иное, как интерфейс для системного вызова Unix select()
.И это довольно легко понять, поскольку использование не так сильно отличается от интерфейса Python. Для любопытных вы можете прочитать больше о справочной странице для выбора и по этим ссылкам:
Теперь, когда мы лучше понимаем , выберите
, давайте использовать его, чтобы сделать лучше, чем в нашем последнем примере, где мы фактически используем сделать сокет неблокирующим. Мы собираемся использовать генераторы, чтобы убедиться, что наш скрипт не блокирует выполнение других вещей и позволяет выполняться другому коду.Рассмотрим следующий пример:
import errno
import select
import socket
import timedef other_task():
i = 0
while i < 2000:
i += 1
print i
time.sleep(0.02)
yielddef send_data_task (порт, данные):
sock = socket. socket (socket.AF_INET, socket.SOCK_STREAM)
sock.connect (('localhost', порт))
sock.setblocking (0)data = ( data + '\n') * 1024 * 1024
print 'Байтов для отправки:', len(data)total_sent = 0
while len(data):
try:
send = sock.send(data)
total_sent += sent
data = data[sent:]
print 'Отправка данных'
кроме socket.error, e:
if e.errno != errno.EAGAIN:
поднять e
yield ('w ', sock)print 'Отправлено байтов: ', total_sent
if __name__ == '__main__':
tasks = [
other_task(),
send_data_task(port=1234, data='foo'),
send_data_task( port=5678, data='bar'),
]fds = dict(w={}, r={})
в то время как len(tasks) или len(fds['w']) или len(fds[ 'r']):
new_tasks = []
для задачи в задачах:
try:
resp = next(task)
try:
iter(resp)
fds[resp[0]][resp[1]] = задача
, кроме TypeError:
# эта задача должна быть выполнена, так как не
# зависит от любого fd
new_tasks. append(task)
, кроме StopIteration:
# функция завершена
passif len(fds['w'].keys()) или len(fds['r'].keys()):
чтение, запись, исключительный = select.select(
fds['r'].keys(), fds['w'].keys(), [], 0)
для readable_sock в readable:
new_tasks.append(fds['r' ][fd])
del fds['r'][fd]
для fd в записываемом:
new_tasks.append(fds['w'][fd])
del fds['w'][fd]
# пока игнорировать исключительныеtasks = new_tasks
Для запуска этого примера мы запустим два экземпляра серверов и заставим наш скрипт делать две вещи одновременно — запустить функцию, которая просто увеличивает переменную в цикле и отправляет данные в два сервера.Оба сервера по сути одинаковы. Они просто работают на разных портах, чтобы наш скрипт мог подключаться к двум серверам одновременно.
В приведенном выше примере у нас есть две функции send_data_task()
и other_task()
. send_data_task()
пытается отправить большое количество данных на TCP-сервер. other_task()
просто запускает счетчик. Мы хотим выполнить обе функции. Если мы выполним их один за другим, то мы в конечном итоге заблокируем тот, который выполняется позже.Однако мы можем иметь обе функции, работающие одновременно. Мы используем неблокирующие сокеты и генераторы, чтобы две функции работали совместно.
Функция send_data_task()
создает неблокирующий сокет и пытается отправить данные, как в предыдущем примере. Единственное отличие состоит в том, что дает
, когда буфер записи заполняется и возникает исключение. Поскольку мы больше не можем отправлять данные через сокет, мы можем выполнить другой блок кода, не зависящий от этой функции. other_task()
Функция — это простая функция для этого примера, которая просто запускает счетчик в цикле. Эта функция также дает результат после каждой итерации цикла.
В случае send_data_task()
мы возвращаем
, когда мы не можем отправить больше данных, так как наш буфер записи заполнен. Но когда мы уступаем, мы также возвращаем кортеж с типом операций над сокетом («w» для записи, «r» для чтения) и сам объект сокета. Когда выполнение возвращается вызываемому объекту, мы сохраняем сопоставление объектов сокета с генератором, который его вернул.
В случае other_task
мы уступаем после каждой итерации. Почему? Если мы этого не сделаем, функция будет продолжать выполняться до тех пор, пока не завершит все, что должна сделать, и наша другая функция send_data_task()
не получит возможности продолжить. Поэтому мы сознательно пытаемся переключить выполнение на другую функцию, когда это возможно. Поскольку эта функция не зависит ни от какого объекта fd или сокета, мы ничего не возвращаем, когда уступаем. Это просто способ, которым мы разработали нашу реализацию — как бы уродливо это ни выглядело, но это делает вещи простыми для понимания.
В нашем основном блоке мы поддерживаем список функций, которые мы хотим вызвать, в списке с именем tasks
. Чтобы быть точным, обе наши функции используют , возвращают
и, следовательно, возвращают генераторы, когда мы их вызываем. Таким образом, 90 127 задач 90 128 фактически поддерживают список генераторов, возвращаемых функциями, которые мы хотим выполнять совместно. Мы запускаем цикл до тех пор, пока наши задачи не завершат свое выполнение. На каждой итерации цикла мы запускаем каждую задачу одну за другой, используя функцию next()
.Функция возобновляет свое выполнение и возвращает результат всякий раз, когда это возможно.
Цикл while выполняется до тех пор, пока список задач не пуст или у нас есть какие-либо fds или объекты сокетов для наблюдения. Мы выполняем каждую задачу по очереди. Когда мы вызываем send_data_task
, он возвращает кортеж с операцией (чтение или запись), которую мы выполняли над сокетом, и сам объект сокета. Мы храним объект сокета в словаре с именем fds
, где мы поддерживаем два разных словаря объектов — один для тех, в которые мы записываем, а другой — для тех, из которых мы читаем. Затем мы запускаем other_task()
, и это ничего не дает.
Выполнение возвращается в основной блок. После выполнения задач мы видим, есть ли какие-либо объекты сокетов или fds, которые нам нужно отслеживать, используя select()
и вызываем их соответствующим образом. select()
возвращает подмножество сокетов/fds, которые могут быть прочитаны или записаны. Если мы можем читать или писать в любой сокет/fd, мы ищем соответствующий генератор в соответствующем словаре в fds
и добавляем его в новый список задач, которые должны быть выполнены в следующей итерации нашего основного цикла while .Наконец, мы просто заменяем tasks на new_tasks
, чтобы циклы while подбирали новые задачи.
Это будет продолжаться до тех пор, пока у нас не останется задач в списке задач и сокетов/fds, за которыми нужно следить. Таким образом, наши функции совместно позволяют друг другу действовать. Пример, возможно, уродлив и даже не близок к реальному использованию, но он прост и передает идею.
Этот большой цикл while, который вы видите в нашем основном блоке, является нашей реализацией цикла обработки событий для нашего скрипта.Что оно делает? Он просто следит за сетевыми событиями и планирует выполнение соответствующих блоков кода, когда и как они могут. Однако наша реализация очень проста и, конечно же, не справляется с самыми распространенными вещами. Этого достаточно для понимания концепции.
Все примеры кода в этой статье можно найти здесь.
Это было введение в то, как вы можете сделать сокеты неблокирующими и использовать функцию выбора из модуля выбора для просмотра файловых дескрипторов для чтения или записи.Мы поняли, как работает select(), создали скрипт, который не блокирует сетевой ввод-вывод, используя неблокирующие сокеты, и использовали генераторы и select() для реализации очень простого цикла ввода-вывода.
В следующей статье мы рассмотрим больше примеров и рассмотрим другую инфраструктуру для обработки неблокирующих сокетов, такую как poll и epoll.
обертки сокетов — документация по болтонам 21.0.0
В основном предоставляет recv_until и recv_size. прием, отправка, отправка всех и
функция peek all максимально похожа на встроенную розетку
API.
Этот тип был протестирован как для встроенной розетки, так и для
а также от gevent и eventlet. Он также имеет поддержку
для сокетов с тайм-аутами, установленными на 0 (также называемыми неблокирующими), при условии, что
вызывающая сторона готова обрабатывать исключения EWOULDBLOCK.
Параметры: |
|
---|
timeout и maxsize могут быть переопределены на отдельных сокетах
операции.
Все методы recv
возвращают строки байтов ( байт
) и могут
поднять socket.error
. Время ожидания
,
ConnectionClosed
и MessageTooLong
все наследуют
из socket.error
и существуют, чтобы обеспечить лучшую ошибку
Сообщения. Полученные байты всегда буферизируются, даже если исключение
Поднялся.Используйте BufferedSocket. getrecvbuffer()
для получения
частичное получение
BufferedSocket не заменяет встроенный сокет каким-либо
означает. В то время как перекрывающиеся части API остаются параллельными
встроенный socket.socket
, BufferedSocket не
наследовать от сокета, и большая часть функций сокета только
доступны на базовом сокете. сокет.getpeername()
,
socket.getsockname()
, socket.fileno()
и другие
доступен только в базовом сокете, который обернут.Использовать
Атрибут BufferedSocket.sock
для доступа к нему. См. примеры
для получения дополнительной информации о том, как использовать BufferedSockets со встроенным
Розетки.
BufferedSocket является потокобезопасным, но следует учитывать семантику
ваш протокол перед доступом к одному сокету из нескольких
потоки. Точно так же, как только BufferedSocket создан, избегайте
используя базовый сокет напрямую. Используйте его только для операций
не связанные с сообщениями, например, socket. getpeername()
.
-
буфер
( данные )[источник] Буфер данных байта для следующей операции отправки.
-
закрыть
()[источник] Закрывает обернутый сокет и очищает внутренние буферы. То
буфер отправки не очищается автоматически, поэтому, если вы
вызовbuffer()
, обязательно позвоните
flush()
перед вызовом этого
метод. После вызова этого метода будущие операции с сокетами
подниметsocket.error
.
-
семейство
Переход к семейству обернутых сокетов.буферизованный сокет
поддерживает все широко используемые семейства, поэтому этот атрибут только для чтения
может быть одним изsocket.AF_INET
для IP,
socket.AF_INET6
для IPv6 иsocket.AF_UNIX
для УДС.
-
файл №
()[источник] Возвращает файловый дескриптор упакованного сокета. -1, если есть
был закрыт с этой стороны.Обратите внимание, что это делает BufferedSocket доступным для выбора, т. е.
может использоваться для циклов событий операционной системы без каких-либо внешних
библиотеки.Имейте в виду, что операционная система не может знать
о данных во внутреннем буфере BufferedSocket. Упражнение
дисциплина с вызовомrecv*
функций.
-
заподлицо
()[источник] Отправьте содержимое внутреннего буфера отправки.
-
getpeername
()[источник] Вспомогательная функция возврата удаленного адреса, на который
обернутый сокет подключен. См. сокет.получитьимя узла ()
Больше подробностей.
-
getrecvbuffer
()[источник] Возвращает строку байтов приемного буфера (rbuf).
-
getendbuffer
()[источник] Возвращает копию списка буфера отправки.
-
getsockname
()[источник] Вспомогательная функция для возврата собственного адреса обернутого сокета.
Подробнее см.socket.getsockname()
.
-
getsockopt
( level , optname , buflen=None )[источник] Вспомогательная функция, проходящая через обернутые сокеты
сокет.getsockopt()
.
-
просмотр
( размер , timeout=_UNSET )[источник] Возвращает размером байта из сокета и/или внутреннего буфера. Байты
сохраняются во внутреннем буфере recv BufferedSocket.Только
см. байты в буфере recv, используйтеgetrecvbuffer()
.Параметры: - size ( int ) — точное количество байтов для просмотра
- timeout ( float ) — Тайм-аут для этой операции. Может быть 0 для
неблокирующий и None для отсутствия тайм-аута. Значение по умолчанию
устанавливается в конструкторе BufferedSocket.
Если из
буфер и сокет до истечения времени ожидания , затем
Тайм-аут
будет увеличен.Если соединение закрыто,
ConnectionClosed
будет поднят.
-
прототип
Переход к протоколу обернутого сокета.
прототип
используется очень редко, поэтому он всегда равен 0, что означает
протокол по умолчанию». Почти вся практическая информация.
находится втипа
и
семья
, так что вы можете вернуться в никогда
думаю об этом.
-
recv
( размер , флаги = 0 , тайм-аут = _UNSET ) [источник] Возвращает от до размером байта, используя внутренний буфер до
выполнение одного сокета. recv()
операция.Параметры: - size ( int ) — максимальное количество байтов для приема.
- flags ( int ) — сохранено для совместимости API с сокетами. Только
значение по умолчанию0
допустимо. - timeout ( float ) — Тайм-аут для этой операции. Возможно
0
для неблокирующего иНет
для нет
тайм-аут.По умолчанию значение, установленное в конструкторе
из BufferedSocket.
Если операция не завершается в течение таймаута секунд,
Инициирован тайм-аут
. Почти как встроенный
socket.socket
, если этот метод возвращает пустую строку,
затем сокет закрывается, а буфер recv пуст. Дальше
вызовы recv вызовутsocket.error
.
-
recv_close
( timeout=_UNSET , maxsize=_UNSET )[источник] Получение до закрытия соединения, до maxsize байт. Если
получено более maxsize байт, вызываетMessageTooLong
.
-
recv_size
( размер , timeout=_UNSET )[источник] Считать из внутреннего буфера, затем из сокета, пока
размер Прочитано байта.Параметры: - size ( int ) – количество байтов для чтения перед возвратом.
- timeout ( float ) — Тайм-аут для этой операции. Может быть 0 для
неблокирующий и None для отсутствия тайм-аута. Значение по умолчанию
устанавливается в конструкторе BufferedSocket.
Если из
буфер и сокет до истечения времени ожидания , затем
Тайм-аут
будет увеличен. Если соединение закрыто,
ConnectionClosed
будет поднят.
-
recv_until
( delimiter , timeout=_UNSET , maxsize=_UNSET , with_delimiter=False )[источник] Получение до тех пор, пока не будет найден разделитель , максимальный размер байта был прочитан,
или превышен тайм-аут .Параметры: - разделитель ( байт ) – Один или несколько байтов для поиска
в потоке сокета. - timeout ( float ) — Тайм-аут для этой операции. Может быть 0 для
неблокирующий и None для отсутствия тайм-аута. Значение по умолчанию
устанавливается в конструкторе BufferedSocket. - maxsize ( int ) — максимальный размер внутреннего буфера.По умолчанию используется значение, установленное в конструкторе.
- with_delimiter ( bool ) – Включать или нет
разделитель в выводе.Ложь
по умолчанию, но
True
полезен в тех случаях, когда нужно просто
пересылка сообщений.
recv_until
вызовет следующие исключения:-
Время ожидания
, если истекло более времени ожидания секунды. -
ConnectionClosed
, если базовый сокет закрыт
по отправляющему концу. -
MessageTooLong
, если разделитель не найден в
первый максимальный размер байта. -
socket.error
при работе в неблокирующем режиме
( тайм-аут равен 0), или если какая-то непредвиденная ошибка сокета
происходит, например, при работе с закрытым сокетом.
- разделитель ( байт ) – Один или несколько байтов для поиска
-
отправить
( данные , флаги = 0 , тайм-аут = _UNSET ) [источник] Отправить содержимое внутреннего буфера отправки, а также данные ,
к принимающей стороне соединения.Возвращает общее количество
количество отправленных байтов. Если исключение не возникает, все данных были
отправлено, а внутренний буфер отправки пуст.Параметры: - данные ( байт ) – байты для отправки.
- flags ( int ) — сохранено для совместимости API с сокетами. Только
значение по умолчанию 0 действительно. - timeout ( float ) — Тайм-аут для этой операции.Может быть 0 для
неблокирующий и None для отсутствия тайм-аута. Значение по умолчанию
устанавливается в конструкторе BufferedSocket.
Поднимет
Тайм-аут
, если операция отправки не удастся
завершить до тайм-аут . В случае исключения используйте
BufferedSocket.getsendbuffer()
, чтобы увидеть, какие данные были
неотправленный.
-
sendall
( data , flags=0 , timeout=_UNSET )[источник] Транзит к
send()
, сохраняется для
параллельность с сокетом.API сокета
.
-
setmaxsize
( maxsize )[источник] Установить максимальный размер буфера по умолчанию maxsize на будущее
операций, в байтах. Не усекает текущий буфер.
-
setsockopt
( уровень , имя опции , значение ) [источник] Вспомогательная функция, проходящая через обернутые сокеты
сокет.setsockopt()
.
-
settimeout
( timeout )[источник] Установить тайм-аут по умолчанию для будущих операций в секундах.
-
выключение
( как )[источник] Удобный метод, который проходит через обернутые сокеты
выключение()
. Семантика зависит от платформы, поэтому нет
специальная внутренняя обработка выполняется с буферами. Этот
метод существует для облегчения наиболее распространенного использования, в котором
полное отключение
закрыть()
.Разработчики, которым требуется больше
поддержки, пожалуйста, откройте вопрос.
-
тип
Переход к типу обернутого сокета. Допустимые обычаи должны
видеть толькоsocket.SOCK_STREAM
.
Выдвижные блоки розеток | Alzashop.com
Мы используем 8 категорий файлов cookie на нашем веб-сайте:
Технические файлы cookie
Они строго необходимы для функционирования веб-сайта и функций, которые вы решите использовать.Без них наш сайт не работал бы; например, вы не сможете войти в свою учетную запись пользователя.
Функциональные файлы cookie
Эти файлы cookie позволяют нам запоминать ваш основной выбор и улучшать взаимодействие с пользователем. К ним относятся запоминание предпочитаемого вами языка или возможность постоянно оставаться в системе.
Файлы cookie социальных сетей
Эти файлы cookie позволяют нам легко связать вас с вашим профилем в социальных сетях и, например, позволяют вам делиться продуктами и услугами с друзьями и семьей.
Персонализация контента
Эти файлы cookie позволяют нам показывать вам контент и рекламу в соответствии с имеющейся у нас информацией о вас, чтобы наилучшим образом удовлетворить ваши потребности. Это включает в себя то, какой контент вы просматривали или с какого устройства вы заходите на наш веб-сайт.
Неперсонализированная реклама
Эти файлы cookie позволяют нам показывать вам общую рекламу продуктов и услуг.
Персонализированная реклама
Благодаря этим файлам cookie мы и наши партнеры можем предлагать вам соответствующие продукты и услуги на основе ваших покупок, вашего покупательского поведения и ваших предпочтений.
Показатели аудитории
Эти файлы cookie позволяют нам оптимизировать наш сайт для вашего удобства в зависимости от того, как вы его используете. Цель состоит в том, чтобы запомнить или предвидеть ваш выбор. Это включает, например, использование функций, их расположение или поведение на странице.
Сторонние файлы cookie
Это сторонние файлы cookie, и вы можете узнать больше о них и наших партнерах здесь.
Дав согласие на обработку файлов cookie, функциональные и аналитические файлы cookie будут установлены на устройстве, которое вы используете для просмотра веб-сайта (нажмите кнопку «Я понимаю» для обеих категорий, или вы можете выбрать только одну из категорий нажав на кнопку «Настройки»). Мы всегда устанавливаем технические файлы cookie на ваше устройство, даже без вашего явного согласия, потому что без них наш сайт просто не работал бы.
Вы можете отозвать свое согласие на обработку файлов cookie. В связи с обработкой файлов cookie нашей компанией у вас также есть следующие права: право доступа к файлам cookie, их удаление, изменение, дополнение и исправление, ограничение обработки и право подать жалобу в Управление по защите персональных данных. Узнайте больше о своих правах.
Для получения более подробной информации о том, как мы обрабатываем файлы cookie, ознакомьтесь с нашей Политикой защиты персональных данных.
АдресСемья | Получает семейство адресов Socket. |
Доступный | Получает объем данных, полученных из сети и доступных для чтения. |
Блокировка | Получает или задает значение, указывающее, находится ли Socket в режиме блокировки. |
Связанный | Получает значение, указывающее, был ли сокет подключен к удаленному узлу на момент последней операции отправки или получения. |
Нефрагмент | Получает или задает значение, указывающее, разрешает ли Socket фрагментацию дейтаграмм Интернет-протокола (IP). |
Двойной режим | Получает или задает значение, указывающее, является ли Socket двухрежимным сокетом, используемым как для IPv4, так и для IPv6. |
Включить трансляцию | Получает или задает логическое значение, указывающее, может ли Socket отправлять или получать широковещательные пакеты. |
ExclusiveAddressUse | Получает или задает логическое значение, указывающее, разрешает ли Socket только одному процессу привязываться к порту. |
Ручка | Получает дескриптор операционной системы для сокета. |
Связан | Получает значение, указывающее, привязан ли Socket к определенному локальному порту. |
LingerState | Получает или задает значение, указывающее, будет ли Socket задерживать закрытие сокета при попытке отправить все ожидающие данные. |
Локальная конечная точка | Получает локальную конечную точку. |
Многоадресная петля | Получает или задает значение, указывающее, доставляются ли исходящие многоадресные пакеты отправляющему приложению. |
Без задержки | Получает или задает логическое значение, указывающее, использует ли поток Socket алгоритм Nagle. |
ОСПоддерживаетIPv4 | Указывает, поддерживают ли базовая операционная система и сетевые адаптеры Интернет-протокол версии 4 (IPv4). |
ОСПоддерживаетIPv6 | Указывает, поддерживают ли базовая операционная система и сетевые адаптеры Интернет-протокол версии 6 (IPv6). |
OSSupportsUnixDomainSockets | Указывает, поддерживает ли базовая операционная система сокеты домена Unix. |
Тип протокола | Получает тип протокола сокета. |
ReceiveBufferSize | Получает или задает значение, указывающее размер приемного буфера Socket. |
Получение тайм-аута | Получает или задает значение, указывающее время, по истечении которого синхронный вызов Receive истечет по тайм-ауту. |
RemoteEndPoint | Получает удаленную конечную точку. |
SafeHandle | Получает SafeSocketHandle, представляющий дескриптор сокета, который инкапсулирует текущий объект Socket. |
SendBufferSize | Получает или задает значение, указывающее размер буфера отправки Socket. |
SendTimeout | Получает или задает значение, указывающее время, по истечении которого истечет время ожидания синхронного вызова Send. |
Тип сокета | Получает тип сокета. |
Поддерживает IPv4 | Устарело. Устарело. Устарело. Устарело. Получает значение, указывающее, доступна ли и включена ли поддержка IPv4 на текущем узле. |
Поддерживает IPv6 | Устарело. Устарело. Устарело. Устарело. Получает значение, указывающее, поддерживает ли платформа IPv6 для определенных устаревших членов Dns. |
TTL | Получает или задает значение, указывающее значение времени жизни (TTL) пакетов интернет-протокола (IP), отправляемых Socket. |
UseOnlyOverlappedIO | Устарело. Получает или задает значение, указывающее, должен ли сокет использовать только режим перекрывающегося ввода-вывода. В .NET 5+ (включая версии .NET Core) значение всегда равно |
Принимать() | Создает новый сокет для вновь созданного соединения. |
Акцептасинк() | Принимает входящее соединение. |
Акцептасинк (CancellationToken) | Принимает входящее соединение. |
Акцептасинк (сокет) | Принимает входящее соединение. |
AcceptAsync (сокет, CancellationToken) | Принимает входящее соединение. |
Акцептасинк(SocketAsyncEventArgs) | Начинает асинхронную операцию для принятия попытки входящего подключения. |
BeginAccept(AsyncCallback, Объект) | Начинает асинхронную операцию для принятия попытки входящего подключения. |
BeginAccept(Int32, AsyncCallback, Объект) | Начинает асинхронную операцию, чтобы принять попытку входящего подключения и получить первый блок данных, отправленный клиентским приложением. |
BeginAccept(Socket, Int32, AsyncCallback, Объект) | Начинает асинхронную операцию, чтобы принять попытку входящего подключения из указанного сокета и получить первый блок данных, отправленный клиентским приложением. |
BeginConnect(EndPoint, AsyncCallback, Объект) | Начинает асинхронный запрос на подключение к удаленному узлу. |
BeginConnect (IP-адрес, Int32, AsyncCallback, объект) | Начинает асинхронный запрос на подключение к удаленному узлу. Хост определяется IP-адресом и номером порта. |
BeginConnect(IPAddress[], Int32, AsyncCallback, Объект) | Начинает асинхронный запрос на подключение к удаленному узлу.Хост определяется массивом IP-адресов и номером порта. |
BeginConnect(String, Int32, AsyncCallback, Объект) | Начинает асинхронный запрос на подключение к удаленному узлу. Хост определяется именем хоста и номером порта. |
BeginDisconnect (логическое значение, AsyncCallback, объект) | Начинает асинхронный запрос на отключение от удаленной конечной точки. |
BeginReceive(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) | Начинает асинхронно получать данные от подключенного сокета. |
BeginReceive(Byte[], Int32, Int32, SocketFlags, SocketError, AsyncCallback, Object) | Начинает асинхронно получать данные от подключенного сокета. |
BeginReceive(IList | Начинает асинхронно получать данные от подключенного сокета. |
BeginReceive(IList | Начинает асинхронно получать данные от подключенного сокета. |
BeginReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint, AsyncCallback, Object) | Начинает асинхронно получать данные от указанного сетевого устройства. |
BeginReceiveMessageFrom(Byte[], Int32, Int32, SocketFlags, EndPoint, AsyncCallback, Object) | Начинает асинхронно получать указанное количество байтов данных в указанное расположение буфера данных, используя указанные SocketFlags, и сохраняет информацию о конечной точке и пакете. |
BeginSend(Byte[], Int32, Int32, SocketFlags, AsyncCallback, Object) | Асинхронно отправляет данные в подключенный сокет. |
BeginSend(Byte[], Int32, Int32, SocketFlags, SocketError, AsyncCallback, Object) | Асинхронно отправляет данные в подключенный сокет. |
BeginSend(IList | Асинхронно отправляет данные в подключенный сокет. |
BeginSend(IList | Асинхронно отправляет данные в подключенный сокет. |
BeginSendFile (строка, асинхронный вызов, объект) | Отправляет файл |
BeginSendFile(String, Byte[], Byte[], TransmitFileOptions, AsyncCallback, Object) | Асинхронно отправляет файл и буферы данных в подключенный объект Socket. |
BeginSendTo(Byte[], Int32, Int32, SocketFlags, EndPoint, AsyncCallback, Object) | Асинхронно отправляет данные на указанный удаленный хост. |
Привязать (Конечная точка) | Связывает сокет с локальной конечной точкой. |
Канселконнектасинк (SocketAsyncEventArgs) | Отменяет асинхронный запрос на подключение к удаленному хосту. |
Закрывать() | Закрывает соединение Socket и освобождает все связанные ресурсы. |
Закрыть (Int32) | Закрывает соединение Socket и освобождает все связанные ресурсы с заданным временем ожидания, чтобы разрешить отправку данных в очереди. |
Подключиться (конечная точка) | Устанавливает соединение с удаленным хостом. |
Подключиться (IP-адрес, Int32) | Устанавливает соединение с удаленным хостом. Хост определяется IP-адресом и номером порта. |
Подключить (IP-адрес [], Int32) | Устанавливает соединение с удаленным хостом. Хост определяется массивом IP-адресов и номером порта. |
Соединить (строка, Int32) | Устанавливает соединение с удаленным хостом.Хост определяется именем хоста и номером порта. |
Коннектасинк (конечная точка) | Устанавливает соединение с удаленным хостом. |
ConnectAsync(EndPoint, CancellationToken) | Устанавливает соединение с удаленным хостом. |
ConnectAsync (IP-адрес, Int32) | Устанавливает соединение с удаленным хостом. |
ConnectAsync (IP-адрес, Int32, CancellationToken) | Устанавливает соединение с удаленным хостом. |
ConnectAsync (IP-адрес [], Int32) | Устанавливает соединение с удаленным хостом. |
ConnectAsync(IPAddress[], Int32, CancellationToken) | Устанавливает соединение с удаленным хостом. |
Коннектасинк (SocketAsyncEventArgs) | Начинает асинхронный запрос на подключение к удаленному хосту. |
ConnectAsync (SocketType, ProtocolType, SocketAsyncEventArgs) | Начинает асинхронный запрос на подключение к удаленному хосту. |
Коннектасинк (строка, Int32) | Устанавливает соединение с удаленным хостом. |
ConnectAsync(String, Int32, CancellationToken) | Устанавливает соединение с удаленным хостом. |
Отключить (логическое значение) | Закрывает подключение к сокету и разрешает повторное использование сокета. |
DisconnectAsync (логическое значение, CancellationToken) | Отключает подключенный сокет от удаленного хоста. |
DisconnectAsync(SocketAsyncEventArgs) | Начинает асинхронный запрос на отключение от удаленной конечной точки. |
Утилизировать() | Освобождает все ресурсы, используемые текущим экземпляром класса Socket. |
Распоряжаться (логическое значение) | Освобождает неуправляемые ресурсы, используемые Socket, и при необходимости удаляет управляемые ресурсы. |
Дубликат и закрыть (Int32) | Дублирует ссылку на сокет для целевого процесса и закрывает сокет для этого процесса. |
EndAccept(Byte[], IAsyncResult) | Асинхронно принимает входящую попытку подключения и создает новый объект Socket для обработки связи с удаленным узлом. Этот метод возвращает буфер, содержащий исходные переданные данные. |
EndAccept(Byte[], Int32, IAsyncResult) | Асинхронно принимает входящую попытку подключения и создает новый объект Socket для обработки связи с удаленным узлом. Этот метод возвращает буфер, содержащий исходные данные и количество переданных байтов. |
EndAccept(IAsyncResult) | Асинхронно принимает попытку входящего подключения и создает новый сокет для обработки связи с удаленным узлом. |
EndConnect(IAsyncResult) | Завершает ожидающий запрос на асинхронное соединение. |
EndDisconnect(IAsyncResult) | Завершает ожидающий запрос на асинхронное отключение. |
EndReceive(IAsyncResult) | Завершает ожидающее асинхронное чтение. |
EndReceive(IAsyncResult, SocketError) | Завершает ожидающее асинхронное чтение. |
EndReceiveFrom(IAsyncResult, EndPoint) | Завершает ожидающее асинхронное чтение из определенной конечной точки. |
EndReceiveMessageFrom(IAsyncResult, SocketFlags, EndPoint, IPPacketInformation) | Завершает ожидающее асинхронное чтение из определенной конечной точки. Этот метод также предоставляет больше информации о пакете, чем EndReceiveFrom(IAsyncResult, EndPoint). |
EndSend(IAsyncResult) | Завершает ожидающую асинхронную отправку. |
EndSend(IAsyncResult, SocketError) | Завершает ожидающую асинхронную отправку. |
EndSendFile(IAsyncResult) | Завершает ожидающую асинхронную отправку файла. |
EndSendTo(IAsyncResult) | Завершает ожидающую асинхронную отправку в указанное место. |
Равно(Объект) | Определяет, равен ли указанный объект текущему объекту. (Унаследовано от объекта) |
Завершить() | Освобождает ресурсы, используемые классом Socket. |
ПолучитьHashCode() | Возвращает хеш-значение для экземпляра Socket. |
ПолучитьHashCode() | Служит хеш-функцией по умолчанию. (Унаследовано от объекта) |
GetRawSocketOption(Int32, Int32, Span | Получает значение параметра сокета, используя идентификаторы уровня и имени для конкретной платформы. |
GetSocketOption(SocketOptionLevel, SocketOptionName) | Возвращает значение указанной опции Socket, представленное в виде объекта. |
GetSocketOption(SocketOptionLevel, SocketOptionName, Byte[]) | Возвращает указанное значение параметра Socket, представленное в виде массива байтов. |
GetSocketOption(SocketOptionLevel, SocketOptionName, Int32) | Возвращает значение указанной опции Socket в массиве. |
ПолучитьТип() | Получает тип текущего экземпляра. (Унаследовано от объекта) |
IOControl(Int32, Байт[], Байт[]) | Устанавливает низкоуровневые режимы работы для Сокета с использованием кодов числового управления. |
IOControl(IOControlCode, Байт[], Байт[]) | Устанавливает низкоуровневые режимы работы для сокета, используя перечисление IOControlCode для указания управляющих кодов. |
Слушать() | Помещает сокет в состояние прослушивания. |
Слушай(Int32) | Помещает сокет в состояние прослушивания. |
MemberwiseClone() | Создает поверхностную копию текущего объекта. (Унаследовано от объекта) |
Опрос (Int32, SelectMode) | Определяет состояние сокета. |
Получить (байт []) | Получает данные из связанного сокета в приемный буфер. |
Получить (Byte [], Int32, Int32, SocketFlags) | Получает указанное количество байтов из связанного сокета в указанную позицию смещения буфера приема, используя указанные флаги сокета. |
Получить (Byte [], Int32, Int32, SocketFlags, SocketError) | Получает данные из связанного сокета в приемный буфер, используя указанные флаги сокета. |
Прием (Byte [], Int32, SocketFlags) | Получает указанное количество байтов данных из связанного сокета в приемный буфер, используя указанные флаги сокета. |
Получить (байт [], SocketFlags) | Получает данные из связанного сокета в приемный буфер, используя указанные флаги сокета. |
Получить (IList | Получает данные из связанного сокета в список приемных буферов. |
Получить (IList | Получает данные из связанного сокета в список приемных буферов, используя указанные флаги сокета. |
Получить (IList | Получает данные из связанного сокета в список приемных буферов, используя указанные флаги сокета. |
Получить(Span | Получает данные из связанного сокета в приемный буфер. |
Получить (Span | Получает данные из связанного сокета в приемный буфер, используя указанные флаги сокета. |
Получить (Span | Получает данные из связанного сокета в приемный буфер, используя указанные флаги сокета. |
ReceiveAsync(ArraySegment | Получает данные из подключенного сокета. |
ReceiveAsync (IList | Получает данные из подключенного сокета. |
ReceiveAsync (Memory | Получает данные из подключенного сокета. |
Рецептиасинк (SocketAsyncEventArgs) | Начинает асинхронный запрос на получение данных от подключенного объекта Socket. |
Получать от (байт [], конечная точка) | Получает дейтаграмму в буфер данных и сохраняет конечную точку. |
ReceiveFrom(Byte[], Int32, Int32, SocketFlags, EndPoint) | Получает указанное количество байтов данных в указанное расположение буфера данных, используя указанные SocketFlags, и сохраняет конечную точку. |
ReceiveFrom(Byte[], Int32, SocketFlags, EndPoint) | Получает указанное количество байтов в буфер данных, используя указанные SocketFlags, и сохраняет конечную точку. |
ReceiveFrom(Byte[], SocketFlags, EndPoint) | Получает дейтаграмму в буфер данных, используя указанные SocketFlags, и сохраняет конечную точку. |
ReceiveFrom(Span | Получает дейтаграмму в буфер данных и сохраняет конечную точку. |
ReceiveFrom(Span | Получает дейтаграмму в буфер данных, используя указанные SocketFlags, и сохраняет конечную точку. |
ReceiveFromAsync(ArraySegment | Получает данные и возвращает конечную точку хоста-отправителя. |
ReceiveFromAsync (Memory | Получает данные и возвращает конечную точку хоста-отправителя. |
ReceiveFromAsync (SocketAsyncEventArgs) | Начинает асинхронно получать данные от указанного сетевого устройства. |
ReceiveMessageFrom(Byte[], Int32, Int32, SocketFlags, EndPoint, IPPacketInformation) | Получает указанное количество байтов данных в указанное место буфера данных, используя указанные SocketFlags, и сохраняет информацию о конечной точке и пакете. |
ReceiveMessageFrom(Span | Получает указанное количество байтов данных в указанное место буфера данных, используя указанные |
ReceiveMessageFromAsync(ArraySegment | Получает данные и возвращает дополнительную информацию об отправителе сообщения. |
ReceiveMessageFromAsync (Memory | Получает данные и возвращает дополнительную информацию об отправителе сообщения. |
Рецептимессажефромасинк (SocketAsyncEventArgs) | Начинает асинхронно получать указанное количество байтов данных в указанное место в буфере данных, используя указанные SocketFlags, и сохраняет информацию о конечной точке и пакете. |
Выберите (IList, IList, IList, Int32) | Определяет состояние одного или нескольких сокетов. |
Отправить (байт []) | Отправляет данные в подключенный сокет. |
Отправить (Byte [], Int32, Int32, SocketFlags) | Отправляет указанное количество байтов данных в подключенный сокет, начиная с указанного смещения и используя указанные флаги сокета. |
Отправить (Byte [], Int32, Int32, SocketFlags, SocketError) | Отправляет указанное количество байтов данных в подключенный сокет, начиная с указанного смещения и используя указанные флаги сокета. |
Отправить (Byte [], Int32, SocketFlags) | Отправляет указанное количество байтов данных в подключенный сокет, используя указанные флаги сокета. |
Отправить (байт [], SocketFlags) | Отправляет данные в подключенный сокет, используя указанные флаги сокета. |
Отправить (IList | Отправляет набор буферов из списка в подключенный сокет. |
Отправить (IList | Отправляет набор буферов из списка в подключенный Socket, используя указанные SocketFlags. |
Отправить (IList | Отправляет набор буферов из списка в подключенный Socket, используя указанные SocketFlags. |
Отправить (ReadOnlySpan | Отправляет данные в подключенный сокет. |
Отправить (ReadOnlySpan | Отправляет данные в подключенный сокет, используя указанные флаги сокета. |
Отправить (ReadOnlySpan | Отправляет данные в подключенный сокет, используя указанные флаги сокета. |
SendAsync(ArraySegment | Отправляет данные на подключенный сокет. |
SendAsync(IList | Отправляет данные на подключенный сокет. |
SendAsync(ReadOnlyMemory | Отправляет данные на подключенный сокет. |
Сендасинк(SocketAsyncEventArgs) | Асинхронно отправляет данные в подключенный объект Socket. |
ОтправитьФайл(Строка) | Отправляет файл |
SendFile(String, Byte[], Byte[], TransmitFileOptions) | Отправляет файл |
SendFile(String, ReadOnlySpan | Отправляет файл |
SendFileAsync (строка, CancellationToken) | Отправляет файл |
SendFileAsync(String, ReadOnlyMemory | Отправляет файл |
SendPacketsAsync (SocketAsyncEventArgs) | Асинхронно отправляет набор файлов или буферов данных в памяти подключенному объекту Socket. |
Отправить (байт [], конечная точка) | Отправляет данные в указанную конечную точку. |
SendTo(Byte[], Int32, Int32, SocketFlags, EndPoint) | Отправляет указанное количество байтов данных в указанную конечную точку, начиная с указанного места в буфере и используя указанные SocketFlags. |
SendTo(Byte[], Int32, SocketFlags, EndPoint) | Отправляет указанное количество байтов данных в указанную конечную точку, используя указанные SocketFlags. |
SendTo(Byte[], SocketFlags, EndPoint) | Отправляет данные в определенную конечную точку, используя указанные SocketFlags. |
SendTo(ReadOnlySpan | Отправляет данные в указанную конечную точку. |
SendTo(ReadOnlySpan | Отправляет данные в определенную конечную точку, используя указанные SocketFlags. |
SendToAsync(ArraySegment | Отправляет данные на указанный удаленный хост. |
SendToAsync(ReadOnlyMemory | Отправляет данные на указанный удаленный хост. |
SendToAsync(SocketAsyncEventArgs) | Асинхронно отправляет данные на указанный удаленный хост. |
SetIPProtectionLevel (IPProtectionLevel) | Устанавливает уровень защиты IP для сокета. |
SetRawSocketOption(Int32, Int32, ReadOnlySpan | Задает значение параметра сокета, используя идентификаторы уровня и имени для конкретной платформы. |
SetSocketOption(SocketOptionLevel, SocketOptionName, логическое значение) | Задает указанному параметру Socket указанное логическое значение. |
SetSocketOption(SocketOptionLevel, SocketOptionName, Byte[]) | Устанавливает для указанного параметра Socket указанное значение, представленное в виде массива байтов. |
SetSocketOption(SocketOptionLevel, SocketOptionName, Int32) | Устанавливает указанный параметр Socket в указанное целочисленное значение. |
SetSocketOption(SocketOptionLevel, SocketOptionName, Объект) | Устанавливает для указанного параметра Socket указанное значение, представленное в виде объекта. |
Завершение работы (SocketShutdown) | Отключает отправку и получение через сокет. |
Нанизывать() | Возвращает строку, представляющую текущий объект. (Унаследовано от объекта) |
IDisposable.Dispose() | Этот API поддерживает инфраструктуру продукта и не предназначен для использования непосредственно из вашего кода. Освобождает все ресурсы, используемые сокетом. |
Акцептасинк (сокет) | Выполняет асинхронную операцию, чтобы принять попытку входящего подключения к сокету. |
AcceptAsync (сокет, сокет) | Выполняет асинхронную операцию, чтобы принять попытку входящего подключения к сокету. |
ConnectAsync (сокет, конечная точка) | Устанавливает соединение с удаленным хостом. |
ConnectAsync(Socket, EndPoint, CancellationToken) | Устанавливает соединение с удаленным хостом. |
ConnectAsync (сокет, IP-адрес, Int32) | Устанавливает соединение с удаленным хостом. Хост определяется IP-адресом и номером порта. |
ConnectAsync (сокет, IP-адрес, Int32, CancellationToken) | Устанавливает соединение с удаленным хостом, который определяется IP-адресом и номером порта. |
ConnectAsync (сокет, IP-адрес [], Int32) | Устанавливает соединение с удаленным хостом. Хост определяется массивом IP-адресов и номером порта. |
ConnectAsync(Socket, IPAddress[], Int32, CancellationToken) | Устанавливает соединение с удаленным хостом, который определяется массивом IP-адресов и номером порта. |
ConnectAsync (сокет, строка, Int32) | Устанавливает соединение с удаленным хостом. Хост определяется именем хоста и номером порта. |
ConnectAsync (Socket, String, Int32, CancellationToken) | Устанавливает соединение с удаленным хостом, который определяется именем хоста и номером порта. |
ReceiveAsync (Socket, ArraySegment | Получает данные из подключенного сокета. |
ReceiveAsync(Socket, IList | Получает данные из подключенного сокета. |
ReceiveAsync (Socket, Memory | Получает данные из подключенного сокета. |
ReceiveFromAsync(Socket, ArraySegment | Получает данные от указанного сетевого устройства. |
ReceiveMessageFromAsync (Socket, ArraySegment | Получает указанное количество байтов данных в указанное место буфера данных, используя указанные SocketFlags, и сохраняет информацию о конечной точке и пакете. |
SendAsync(Socket, ArraySegment | Отправляет данные в подключенный сокет. |
SendAsync(Socket, IList | Отправляет данные в подключенный сокет. |
SendAsync(Socket, ReadOnlyMemory | Отправляет данные в подключенный сокет. |
SendToAsync(Socket, ArraySegment | Асинхронно отправляет данные на указанный удаленный хост. |
Возвращает ли метод socket.accept() Python 2.7 блокирующий или неблокирующий сокет?
Использование модуля сокета в python 2.7:
1. Я получил объект сокета из метода socket.accept().
2. Я проверил тайм-аут объекта сокета, и он вернул -1.0. Я думаю, это означает, что объект сокета находится в режиме блокировки.
3. Однако, когда я вызываю метод recv для объекта сокета, я получаю сообщение об ошибке:
.
[Errno 10035] Операция неблокирующего сокета не может быть завершена немедленно
4.Эта ошибка имеет смысл только в том случае, если объект сокета не блокируется. Объект сокета должен блокироваться до тех пор, пока не поступят данные.
Почему объект сокета не блокируется, хотя должен блокироваться?
ПРИМЕЧАНИЕ. Я установил тайм-аут для сокета, вызывающего метод accept(). Может ли это быть причиной того, что возвращаемый объект сокета также не блокируется? Если это так, я был бы признателен услышать объяснение, почему это происходит.
определение ожидания_для_соединения (сам): соединение, client_address = self.носок.принять() print 'подключен к' + str(client_address) self.connections.append(соединение)
защита read_from_connections (я): для подключения в self.connections: пытаться: команда = соединение.recv(1024) если команда: команда печати кроме socket.error, ошибка: ошибка печати распечатать соединение._sock.timeout если ошибка.ошибка != ошибка.ЭВУЛДБЛОК: поднять
Что я пробовал:
Я пытался найти свойство blocking_mode где-то внутри объекта сокета, используя встроенный метод dir(), но безуспешно. Поэтому я использовал свойство тайм-аута как индикатор того, блокируется сокет или нет. Пожалуйста, дайте мне знать, если это предположение неверно.
select — эффективное ожидание ввода-вывода
Модуль select обеспечивает доступ к вводу-выводу для конкретной платформы
функции мониторинга.Самый переносимый интерфейс — POSIX.
функция select(), которая доступна в Unix и Windows. То
модуль также включает в себя poll(), API только для Unix и несколько
параметры, которые работают только с определенными вариантами Unix.
выбрать()
Функция Python select() является прямым интерфейсом к
базовая реализация операционной системы. Мониторит розетки, открытые
файлы и каналы (все, что имеет метод fileno(), возвращающий
действительный файловый дескриптор) до тех пор, пока они не станут доступными для чтения или записи, или
возникает ошибка связи.select() облегчает мониторинг
несколько подключений одновременно, и более эффективен, чем
написание цикла опроса на Python с использованием тайм-аутов сокета, потому что
мониторинг происходит на сетевом уровне операционной системы, а не
переводчик.
Примечание
Использование файловых объектов Python с select() работает для Unix, но
не поддерживается под Windows.
Пример эхо-сервера из раздела сокетов можно расширить
отслеживать более одного соединения одновременно с помощью
Выбрать().Новая версия начинается с создания неблокирующего
Сокет TCP/IP и его настройка для прослушивания адреса.
выбор импорта импортный сокет импорт системы очередь импорта # Создаем сокет TCP/IP сервер = socket.socket(socket.AF_INET, socket.SOCK_STREAM) сервер.setblocking(0) # Привязать сокет к порту server_address = ('localhost', 10000) print >>sys.stderr, 'запуск на %s, порт %s' % server_address server.bind(адрес_сервера) # Слушаем входящие соединения server.listen(5)
Аргументами select() являются три списка, содержащие
Каналы связи для мониторинга.Первый — это список объектов.
для проверки входящих данных для чтения, второй содержит
объекты, которые будут получать исходящие данные, когда в их
буфер, а третьи те, в которых может быть ошибка (обычно это
сочетание объектов входного и выходного канала). Следующий шаг
на сервере заключается в настройке списков, содержащих входные источники и
адресаты вывода, которые будут переданы в select().
# Сокеты, из которых мы ожидаем чтения входы = [ сервер ] # Сокеты, в которые мы ожидаем запись выходы = [ ]
Соединения добавляются и удаляются из этих списков сервером
основная петля.Так как эта версия сервера будет ждать
сокет, чтобы он стал доступным для записи перед отправкой любых данных (вместо
немедленная отправка ответа), каждому выходному соединению нужна очередь
действовать как буфер для данных, которые будут отправлены через него.
# Очереди исходящих сообщений (socket:Queue) сообщения_очереди = {}
Основная часть циклов серверной программы вызывает select() для
блокировать и ждать сетевой активности.
при вводе: # Подождите, пока хотя бы один из сокетов будет готов к обработке печать >>систем.stderr, '\nожидание следующего события' доступный для чтения, записи, исключительный = select.select(входы, выходы, входы)
select() возвращает три новых списка, содержащих подмножества
содержимое переданных списков. Все сокеты в
читаемый список имеет входящие данные, буферизованные и доступные для
читать. Все сокеты в списке доступных для записи имеют свободное место
в их буфере и могут быть записаны. Розетки вернулись в
исключительные имели ошибку (фактическое определение
«исключительное состояние» зависит от платформы).
«Чтение» сокетов представляет три возможных случая. Если розетка
является основным «серверным» сокетом, который используется для прослушивания
соединения, то состояние «читаемость» означает, что он готов принять
другое входящее соединение. В дополнение к добавлению нового соединения
к списку входов для мониторинга, этот раздел устанавливает клиентский сокет
чтобы не блокировать.
# Обработка ввода для s в читаемом виде: если s сервер: # "читаемый" серверный сокет готов принять соединение соединение, client_address = s.принимать() print >>sys.stderr, 'новое соединение от', client_address соединение.setblocking(0) inputs.append(соединение) # Даем соединению очередь для данных, которые мы хотим отправить message_queues[соединение] = Очередь.Очередь()
Следующий случай — установленное соединение с клиентом, отправившим
данные. Данные считываются с помощью recv(), а затем помещаются в очередь, чтобы
его можно отправить через сокет и обратно клиенту.
еще: данные = с.получено (1024) если данные: # Доступный для чтения клиентский сокет содержит данные print >>sys.stderr, 'получено "%s" от %s' % (данные, s.getpeername()) message_queues[s].put(данные) # Добавляем выходной канал для ответа если s не в выходах: outputs.append(s)
Доступный для чтения сокет без доступных данных принадлежит клиенту, который
отключен, и поток готов к закрытию.
еще: # интерпретировать пустой результат как закрытое соединение печать >>систем.stderr, 'закрытие', client_address, 'после чтения данных нет' # Остановить прослушивание ввода по соединению если s в выходах: outputs.remove(s) inputs.remove(s) с.закрыть() # Удалить очередь сообщений del message_queues[s]
Меньше случаев для соединений с возможностью записи. Если есть данные
в очереди на соединение отправляется следующее сообщение. В противном случае,
соединение удаляется из списка выходных соединений, чтобы
в следующий раз через цикл select() не указывает, что
сокет готов к отправке данных.
# Обработка выходов для s в записи: пытаться: next_msg = message_queues[s].get_nowait() кроме Queue.Empty: # Нет ожидающих сообщений, поэтому прекратите проверку на возможность записи. print >>sys.stderr, 'очередь вывода для', s.getpeername(), 'пуста' outputs.remove(s) еще: print >>sys.stderr, 'отправка "%s" на %s' % (next_msg, s.getpeername()) s.send(следующее_сообщение)
Наконец, если есть ошибка с сокетом, он закрывается.
# Обработка "исключительных условий" для s в исключительных случаях: print >>sys.stderr, 'обработка исключительного условия для', s.getpeername() # Остановить прослушивание ввода по соединению inputs.remove(s) если s в выходах: outputs.remove(s) с.закрыть() # Удалить очередь сообщений del message_queues[s]
В примере клиентской программы используются два сокета, чтобы продемонстрировать, как
сервер с select() управляет несколькими соединениями одновременно
время.Клиент начинает с подключения каждого сокета TCP/IP к
сервер.
импортная розетка импорт системы messages = [ 'Это сообщение. ', «Будет отправлено», 'по частям.', ] server_address = ('localhost', 10000) # Создаем сокет TCP/IP носки = [сокет.сокет (сокет.AF_INET, сокет.SOCK_STREAM), сокет.сокет(сокет.AF_INET, сокет.SOCK_STREAM), ] # Подключаем сокет к порту, на котором слушает сервер print >>sys.stderr, 'подключение к порту %s %s' % server_address для s в носках: с.подключиться (адрес_сервера)
Затем он отправляет по одной части сообщения через каждый сокет и
читает все ответы, доступные после записи новых данных.
для сообщения в сообщениях: # Отправлять сообщения на оба сокета для s в носках: print >>sys.stderr, '%s: отправка "%s"' % (s.getsockname(), сообщение) s.send(сообщение) # Чтение ответов на обоих сокетах для s в носках: данные = s.recv(1024) print >>sys.stderr, '%s: получено "%s"' % (s.getsockname(), данные) если не данные: print >>sys.stderr, 'закрытие сокета', s.getsockname() с.закрыть()
Запуск сервера в одном окне и клиента в другом. Выход
будет выглядеть так, с разными номерами портов.
$ питон ./select_echo_server.py запуск на локальном хосте, порт 10000 ждем следующего события новое подключение от ('127.0.0.1', 55821) ждем следующего события новое подключение от ('127.0.0.1', 55822) получено "Это сообщение." из ('127.0.0.1', 55821) ждем следующего события отправка «Это сообщение.» на ('127.0.0.1', 55821) ждем следующего события очередь вывода для ('127.0.0.1', 55821) пуста ждем следующего события получено сообщение "Это сообщение." от ('127.0.0.1', 55822) ждем следующего события отправка «Это сообщение.» на ('127.0.0.1', 55822) ждем следующего события очередь вывода для ('127.0.0.1', 55822) пуста ждем следующего события получил "Будет отправлено" от ('127.0.0.1', 55821) получено "Будет отправлено" от ('127.0.0.1', 55822) ждем следующего события отправка «Будет отправлено» на ('127.0.0.1', 55821) отправка «Будет отправлено» на ('127.0.0.1', 55822) ждем следующего события очередь вывода для ('127.0.0.1', 55821) пуста очередь вывода для ('127.0.0.1', 55822) пуста ждем следующего события получил "по частям". из ('127.0.0.1', 55821) получил "по частям". из ('127.0.0.1', 55822) ждем следующего события отправка "по частям". до ('127.0.0,1', 55821) отправка "по частям". в ('127.0.0.1', 55822) ждем следующего события очередь вывода для ('127.0.0.1', 55821) пуста очередь вывода для ('127.0.0.1', 55822) пуста ждем следующего события закрытие ('127.0.0.1', 55822) после чтения данных закрытие ('127.0.0.1', 55822) после чтения данных ждем следующего события
В выходных данных клиента отображаются данные, отправляемые и получаемые с использованием обоих
Розетки.
$ питон ./select_echo_multiclient.py подключение к локальному порту 10000 ('127.0.0.1', 55821): отправка «Это сообщение». ('127.0.0.1', 55822): отправка «Это сообщение». ('127.0.0.1', 55821): получено «Это сообщение». ('127.0.0.1', 55822): получено «Это сообщение». ('127.0.0.1', 55821): отправка "Будет отправлена" ('127.0.0.1', 55822): отправка "Будет отправлена" ('127.0.0.1', 55821): получено "Будет отправлено" ('127.0.0.1', 55822): получено "Будет отправлено" ('127.0.0.1', 55821): отправка "по частям". ('127.0.0.1', 55822): отправка "по частям". ('127.0.0.1', 55821): получали «по частям». ('127.0.0.1', 55822): получено "по частям".
Время ожидания
select() также принимает необязательный четвертый параметр, который является
количество секунд ожидания перед прекращением мониторинга, если нет
каналы стали активными. Использование значения тайм-аута позволяет главному
программный вызов select() как часть более крупного цикла обработки,
выполнение других действий между проверкой сетевого ввода.
По истечении времени ожидания функция select() возвращает три пустых списка.Обновление примера сервера для использования тайм-аута требует добавления дополнительных
аргумент для вызова select() и обработки пустых списков после
выберите() возвращает.
# Подождите, пока хотя бы один из сокетов будет готов к обработке print >>sys.stderr, '\nожидание следующего события' тайм-аут = 1 доступный для чтения, записи, исключительный = select.select (входы, выходы, входы, тайм-аут) если нет (доступно для чтения или записи или исключительное): print >>sys.stderr, 'время ожидания истекло, займитесь чем-нибудь другим' Продолжать
Эта «медленная» версия клиентской программы делает паузу после отправки каждого
сообщение, чтобы имитировать задержку или другую задержку в передаче.
импортная розетка импорт системы время импорта # Создаем сокет TCP/IP носок = сокет.сокет (сокет.AF_INET, сокет.SOCK_STREAM) # Подключаем сокет к порту, на котором слушает сервер server_address = ('localhost', 10000) print >>sys.stderr, 'подключение к порту %s %s' % server_address sock.connect (адрес_сервера) время сна(1) messages = [ 'Первая часть сообщения.', 'Часть вторая сообщения.', ] сумма_ожидаемая = len(''.join(сообщения)) пытаться: # Отправить данные для сообщения в сообщениях: печать >>систем.stderr, 'отправка "%s"' % сообщение sock.sendall(сообщение) время сна (1,5) # Ищем ответ сумма_получено = 0 в то время как сумма_получено < сумма_ожидаемая: данные = носок.recv(16) сумма_получено += длина (данные) print >>sys.stderr, 'получено "%s"' % данных наконец-то: print >>sys.stderr, 'закрытие сокета' носок.закрыть()
Запуск нового сервера с медленным клиентом дает:
$ питон ./select_echo_server_timeout.пи запуск на локальном хосте, порт 10000 ждем следующего события время вышло ждем следующего события время вышло ждем следующего события новое подключение от ('127.0.0.1', 57776) ждем следующего события получена «Часть первая сообщения». из ('127.0.0.1', 57776) ждем следующего события отправка «Части первой сообщения». в ('127.0.0.1', 57776) ждем следующего события очередь вывода для ('127.0.0.1', 57776) пуста ждем следующего события время вышло ждем следующего события получил "Часть вторая сообщения." из ('127.0.0.1', 57776) ждем следующего события отправка «Части второй сообщения». в ('127.0.0.1', 57776) ждем следующего события очередь вывода для ('127.0.0.1', 57776) пуста ждем следующего события время вышло ждем следующего события закрытие ('127.0.0.1', 57776) после чтения данных ждем следующего события время вышло ждем следующего события
И вывод клиента:
$ питон ./select_echo_slow_client.py подключение к локальному порту 10000 отправка "Часть первая сообщения." отправка «Части второй сообщения». получил "Часть первая" получил "сообщение.Часть вторая" получено "сообщение". закрытие сокета
опрос()
Функция poll() предоставляет возможности, аналогичные select(),
но базовая реализация более эффективна. Компромисс
что poll() не поддерживается в Windows, поэтому программы, использующие
poll() менее переносимы.
Эхо-сервер, построенный на основе poll(), запускается с того же сокета
код конфигурации, используемый в других примерах.
выбор импорта импортный сокет импорт системы очередь импорта # Создаем сокет TCP/IP сервер = socket.socket(socket.AF_INET, socket.SOCK_STREAM) сервер.setblocking(0) # Привязать сокет к порту server_address = ('localhost', 10000) print >>sys.stderr, 'запуск на %s, порт %s' % server_address server.bind(адрес_сервера) # Слушаем входящие соединения server.listen(5) # Следите за очередями исходящих сообщений сообщения_очереди = {}
Значение времени ожидания, переданное функции poll(), представлено в
миллисекунд, а не секунд, поэтому для полной паузы
во-вторых, тайм-аут должен быть установлен на 1000.
# Не блокировать навсегда (миллисекунды) ТАЙМ-АУТ = 1000
Python реализует poll() с классом, который управляет
зарегистрированные каналы передачи данных контролируются. Каналы добавляются
вызов register() с флагами, указывающими, какие события
интересно для этого канала. Полный набор флагов:
Событие | Описание |
---|---|
ОПЫЛЬ | Ввод готов |
ПОЛПРИ | Приоритетный ввод готов |
ЗАГРЯЗНЕНИЕ | Возможность получать выходные данные |
ПОЛЛЕРР | Ошибка |
ПОЛХУП | Канал закрыт |
ПОЛЛНВАЛ | Канал не открыт |
Эхо-сервер будет устанавливать некоторые сокеты только для чтения, и
другие для чтения или записи.Соответствующие комбинации
флаги сохраняются в локальные переменные READ_ONLY и
ЧИТАЙ ПИШИ.
# Часто используемые наборы флагов READ_ONLY = select.POLLIN | выберите.ПОЛЛПР | выберите.ОПРОС | выберите.POLLERR READ_WRITE = READ_ONLY | выберите.ЗАГРЯЗНЕНИЕ
Серверный сокет зарегистрирован таким образом, что любой входящий
соединения или данные запускают событие.
# Настроить поллер опросчик = select.poll() poller.register(сервер, READ_ONLY)
Так как poll() возвращает список кортежей, содержащих файл
дескриптор сокета и флаг события, отображение из файла
номера дескрипторов к объектам необходимы для получения
сокет для чтения или записи из него.
# Сопоставить дескрипторы файлов с объектами сокетов fd_to_socket = { server.fileno(): сервер, }
Цикл сервера вызывает poll(), затем обрабатывает «события»
возвращается путем поиска сокета и выполнения действий на основе флага
в случае.
, пока верно: # Подождите, пока хотя бы один из сокетов будет готов к обработке print >>sys.stderr, '\nожидание следующего события' события = poller.poll(TIMEOUT) для fd, флаг в событиях: # Получить фактический сокет из его файлового дескриптора s = fd_to_socket[fd]
Как и в случае с select(), когда сокет основного сервера доступен для чтения,
это действительно означает, что есть ожидающее соединение от клиента.То
новое соединение регистрируется с флагами READ_ONLY для просмотра
чтобы через него проходили новые данные.
# Обработка ввода если флаг & (select.POLLIN | select.POLLPRI): если s сервер: # "читаемый" серверный сокет готов принять соединение соединение, client_address = s.accept() print >>sys.stderr, 'новое соединение от', client_address соединение.setblocking(0) fd_to_socket[ соединение.fileno() ] = соединение poller.register(соединение, READ_ONLY) # Даем соединению очередь для данных, которые мы хотим отправить message_queues[соединение] = Очередь.Очередь()
Сокеты, отличные от сервера, являются существующими клиентами, и recv()
используется для доступа к данным, ожидающим чтения.
еще: данные = s.recv(1024)
Если recv() возвращает какие-либо данные, они помещаются в исходящую очередь
для сокета и флаги для этого сокета изменяются с помощью
изменить(), поэтому poll() будет следить за готовностью сокета
для получения данных.
, если данные: # Доступный для чтения клиентский сокет содержит данные print >>sys.stderr, 'получено "%s" от %s' % (данные, s.getpeername()) message_queues[s].put(данные) # Добавляем выходной канал для ответа poller.modify(s, READ_WRITE)
Пустая строка, возвращаемая функцией recv(), означает, что клиент
отключен, поэтому unregister() используется, чтобы сообщить об опросе
объект, чтобы игнорировать сокет.
еще: # интерпретировать пустой результат как закрытое соединение печать >>систем.stderr, 'закрытие', client_address, 'после чтения данных нет' # Остановить прослушивание ввода по соединению poller.unregister(s) с.закрыть() # Удалить очередь сообщений del message_queues[s]
Флаг POLLHUP указывает на клиента, который «повесил трубку»
соединение, не закрывая его начисто. Сервер прекращает опрос
клиенты, которые исчезают.
elif flag & select.POLLHUP: # Клиент повесил трубку печать >>систем.stderr, 'закрытие', client_address, 'после получения HUP' # Остановить прослушивание ввода по соединению poller.unregister(s) с.закрыть()
Обработка доступных для записи сокетов похожа на версию, используемую в
пример для select(), за исключением того, что Modify() используется для
изменить флаги для сокета в опроснике, вместо того, чтобы удалить его
из списка вывода.
elif flag & select.POLLOUT: # Сокет готов к отправке данных, если они есть для отправки.пытаться: next_msg = message_queues[s].get_nowait() кроме Queue.Empty: # Нет ожидающих сообщений, поэтому прекратите проверку на возможность записи. print >>sys.stderr, 'очередь вывода для', s.getpeername(), 'пуста' poller.modify(s, READ_ONLY) еще: print >>sys.stderr, 'отправка "%s" на %s' % (next_msg, s.getpeername()) s.send(следующее_сообщение)
И, наконец, любые события с POLLERR приводят к тому, что сервер
закрыть розетку.
флаг elif и выбор.POLLERR: print >>sys.stderr, 'обработка исключительного условия для', s.getpeername() # Остановить прослушивание ввода по соединению poller.unregister(s) с.закрыть() # Удалить очередь сообщений del message_queues[s]
Когда сервер на основе опроса запускается вместе с
select_echo_multiclient.py (клиентская программа, использующая несколько
розетки), вывод:
$ питон./select_poll_echo_server.py
запуск на локальном хосте, порт 10000ждем следующего события
ждем следующего события
ждем следующего события
новое подключение от ('127.0.0.1', 58447)ждем следующего события
новое подключение от ('127.0.0.1', 58448)
получено "Это сообщение." от ('127.0.0.1', 58447)ждем следующего события
отправка «Это сообщение.» на ('127.0.0.1', 58447)
получено "Это сообщение." от ('127.0.0.1', 58448)ждем следующего события
очередь вывода для ('127.0.0.1', 58447) пусто
отправка «Это сообщение.» на ('127.0.0.1', 58448)ждем следующего события
очередь вывода для ('127.0.0.1', 58448) пустаждем следующего события
получено "Будет отправлено" от ('127.0.0.1', 58447)
получено "Будет отправлено" от ('127.0.0.1', 58448)ждем следующего события
отправка «Будет отправлено» на ('127.0.0.1', 58447)
отправка «Будет отправлено» на ('127.0.0.1', 58448)ждем следующего события
очередь вывода для ('127.0.0.1', 58447) пуста
очередь вывода для ('127.0.0.1', 58448) пустождем следующего события
получил "по частям". из ('127.0.0.1', 58447)
получил "по частям". из ('127.0.0.1', 58448)ждем следующего события
отправка "по частям". в ('127.0.0.1', 58447)
отправка "по частям". в ('127.0.0.1', 58448)ждем следующего события
очередь вывода для ('127.0.0.1', 58447) пуста
очередь вывода для ('127.0.0.1', 58448) пустаждем следующего события
закрытие ('127.