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


Подключение интернет розетки - 3 ошибки. Схема подключения по цветам для розеток RJ 45.

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

  • обычная 220 Вольт
  • интернет-розетка
  • телевизионная под ТВ

У большинства моделей, например от фирмы Schneider Electric (серия Unica), Legrand, Lezard принцип монтажа практически одинаков и не содержит кардинальных отличий.

Пошагово рассмотрим весь цикл подключение интернет розетки.

Интернет кабель

Монтаж начинается с установки в слаботочном щите роутера и подключении его от силовой розетки 220В.

Далее в отдельном кабельном канале или штробе, не связанной с силовыми линиями, прокладывается 4-х парный кабель UTP серии 5E.

Такой кабель обеспечивает скорость соединения до 1 Гигабита в секунду на расстоянии до 100м. Вот его технические характеристики:

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

На один такой кабель 5E (4 пары), можно подключить только две розетки. При этом отдельно будут задействованы по 2 пары.

Монтаж ведется цельным проводом напрямую от щита до подрозетника. Заводите кабель в монтажную коробку и оставляете необходимый запас - от 15см и более.

Монтаж интернет розетки

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

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

Винтами 3*25мм предварительно закручиваете всю конструкцию. При этом уровнем электрика Pocket Electric проверяете точность установки и затягиваете винты окончательно.

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

Далее, откусываете и оставляете в подрозетнике запас провода, длиной максимум 15см. Снимаете верхний слой изоляции с кабеля UTP.

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

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

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

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

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

Инструкция к интернет розетке Schneider Electric Unica – скачать
Инструкция к Legrand – скачать

Стандарты и схема подключения 

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

  • по стандарту “A”
  • по стандарту “B”

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

Например на Unica:

  • протокол “B” относится к верхней цветовой маркировке. При подключении будете ориентироваться именно по этим цветам.
  • “A” – к нижней цветовой маркировке

Если с этим разобрались, то с дальнейшей установкой не возникнет сложностей. Протокол “B” соответствует цветовой схеме по стандарту EIA/TIA-568B. На одной стороне зажима должны быть следующие цвета:

  • бело-оранжевый

На другой стороне:

  • бело-коричневый

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

Нельзя зачищать его под самую стенку подрозетника, как делают с обычными кабелями NYM или ВВГнГ.

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

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

Далее вставляете в контактные пазы по цветам все провода.

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

Розетка фактически уже подключена. Осталось ее вставить на место в суппорт.

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

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

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

Далее устанавливаете лицевую панель и декоративную рамку.

Подключение к роутеру и обжим коннектора

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

Снимаете изоляцию с другого конца кабеля на 2-3см. Жилы распушиваете и вставляете в определенном порядке, согласно стандарту TIA-568B, или просто "B".

Расположение цветов считается слева-направо:

  • бело-оранжевый
  • бело-коричневый

Стандарт "A" иногда применяется, если вам нужно соединить один компьютер с другим. Здесь один конец кабеля обжимаете по стандарту "B", а другой по "A". Вообще если оба конца кабеля обжаты по одному стандарту (АА или BB), то это называется - патч-корд. А если они поменяны местами (AB или BA), то - кросс.

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

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

Кабеля cat5E и cat6 в коннекторе RJ45 обжимаются по одному принципу. Другая "вилка" здесь не требуется. Различия у кабелей в скорости передачи данных, у cat6 она больше.

Проверка интернет-подключения

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

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

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

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

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

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

Как подключить 4-х жильный телефонный кабель

А что делать, если у вас для интернета используется 4-х жильный телефонный кабель, а розетка под стандарт 8 жил? Как подключить схему в этом случае?

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

Объясняется это тем, что для передачи сигнала нужно использовать контакты 1-2-3-6.

С одной стороны две жилы заводите на контакты 1-2:
  • бело-оранжевый контакт = бело-оранжевая жила
  • оранжевый = оранжевая жила

а с другой, на контакты 3-6:

  • бело-зеленый контакт = бело-синяя жила на кабеле
  • зеленый = синяя жила

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

Также имейте в виду, что при использовании 4-х проводов, т.е. двух пар витой пары, вы сможете достигнуть скорости до 100Мбит/сек. А вот для гигабитной сети (1Гбит/сек) уже понадобятся все 8 проводов.

Ошибки при подключении интернет розетки

1Неправильное подключение жил согласно протокола.

Можно запросто перепутать порядок расположения жил на коннекторе и в самой розетке. Грубо говоря перевернуть их на 180 градусов.

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

При неправильном расключении жил, лампочки на тестере будут загораться не по порядку от 1 до 8, а в произвольных вариантах. Например сначала 1, потом сразу 3, затем 2 и т.д.

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

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

А если вы оставили запас кабеля в монтажной коробке маленьким, то и вовсе столкнетесь с большой головной болью.

3Зачистка внешней изоляции на большое расстояние, вплоть до стен подрозетника, как в обычных сетях 220В.

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

По стандарту не допускается раскручивание витой пары более чем на 13мм, иначе в тестах частотных характеристик появятся ошибки перекрестных наводок (crosstalk). На практике начнутся проблемы при загрузке сети трафиком.

Источники - //cable.ru, Кабель.РФ

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

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

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

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

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

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

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

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

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

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

Приступим!

Фон

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

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

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

Автор

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

Аннотация

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

Розетки

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

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

История

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

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

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

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

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

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

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

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

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

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

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

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

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

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

МПК

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

См. Также

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

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

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

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

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

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

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

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

.

Описание портов и сокетов TCP / IP

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

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

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

Так же, как IP-адрес идентифицирует компьютер, сетевой порт определяет приложение или службу , запущенную на компьютере.

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

На схеме ниже показано соединение компьютера с компьютером и указаны IP-адреса и порты.

Аналогия

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

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

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

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

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

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

Номера портов 0-1023 - хорошо известные порты. Они выделяются серверным службам Управлением по присвоению номеров в Интернете (IANA). например, веб-серверы обычно используют порт 80 , а серверы SMTP используют порт 25 (см. диаграмму выше).

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

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

TCP сокеты

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

Сокет - это комбинация IP-адреса и порта

{схема] На каждом конце соединения будет сокет. {/ Схема]

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

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

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

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

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

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

ваш ПК - IP1 + порт 60401 ——– Yahoo IP3 + порт 80 (стандартный порт)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В этих статьях показано, как использовать netstat в Windows и Linux.

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

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

Вот полезная статья по использованию NMAP из командной строки.

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

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

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

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

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

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

Оцените? И используйте Комментарии, чтобы сообщить мне больше

[Всего: 94 Среднее: 4.1/5]

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

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

Автор

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

Аннотация

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

Розетки

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

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

История

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

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

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

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

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

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

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

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

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

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

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

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

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

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

МПК

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

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

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

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

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

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

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

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

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

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

.

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