LINUX.ORG.RU

Не осиливаю сокеты Беркли

 , ,


0

2

Hello ЛОР, полгода учу плюсы и технологии к нему, знаю qt, stl, sql, асинхронность, многопоточность. Во многих вакансиях указывают tcp, udp и тд, пытаюсь их учить, но получается очень плохо, вроде теорию знаю, но на практике я лох. Что посоветуете делать? бросать учить сокеты и сосредоточится на чем то другом? Заранее спасибо за внимание.

указывают tcp, udp и тд, пытаюсь их учить

Что значит «пытаюсь учить UDP», например? Там учить нечего — всего четыре поля в заголовке. И при чём тут сокеты Беркли?

XMs ★★★★★
()

Уже то что вы:

  1. Признаете что чего-то не знаете
  2. Делаете это на широкую аудиторию
  3. Стремитесь это исправить

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

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

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

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

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

Obezyan
()
Ответ на: комментарий от Obezyan

ну и если путаетесь в сокетах, то вот аналогия именно под них:

  • Сокеты Беркли: правила пользования телефоном
  • Unix-сокеты: звонок внутри одного здания
  • TCP/IP сокеты: звонок через интернет
Obezyan
()
Ответ на: комментарий от Obezyan

Unix-сокеты: звонок внутри одного здания

ИМХО, звонок внутри одного здания больше подходит в качестве аналога TCP/IP сокетов на loopback-интерфейсе. А для AF_UNIX подойдёт способ связи, который принципиально локален, например, «гонять коней» через форточки

annulen ★★★★★
()
Ответ на: комментарий от annulen

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

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

Obezyan
()

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

hibou ★★★★★
()
Ответ на: комментарий от annulen

Мусоропровод же только в одну сторону, не? А обратно как?

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

hibou ★★★★★
()

знаю qt, stl, sql, асинхронность, многопоточность

Сомнительно, что после этого сокеты могут быть сложными. Может быть вышеперечисленное тоже не знаешь?

ox55ff ★★★★★
()

получается очень плохо, вроде теорию знаю, но на практике я лох. Что посоветуете делать?

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

aiqu6Ait ★★★★★
()
Ответ на: комментарий от ivanich10

Вангую, что ТС знает не всё перечисленное, а что такое всё перечисленное. Иначе невозможно даже шапочно выучить вот это вот всё и кресты вдогонку за полгода.

Bfgeshka ★★★★★
()
Ответ на: комментарий от Bfgeshka

Вангую, что ТС знает не всё перечисленное, а что такое всё перечисленное.

«Предупреждаю! Я знаю кунг-фу, карате, айкидо… и ещё много страшных слов!»

CrX ★★★★★
()

знаю qt, stl, sql, асинхронность, многопоточность.

Не осиливаю сокеты

«Я знаю тензорное исчисление, дифуры, преобразование Фурье и разложение в ряд Тейлора. Попытался учить арифметику, но получается очень плохо. Может бросить учить арифметику и сосредоточиться на топологии многомерных пространств?»

Не, ну серьёзно, чо за ботва?

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от Stanson

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

mozgoff
() автор топика
Ответ на: комментарий от mozgoff

Не, ну протоколы это чтобы сокет знал как твои данные оборачивать и посылать. Raw-сокеты, это он ни во что не оборачивает, подразумевается, что ты сам это сделал, полезно для самописных протоколов.

Файловый дескриптор – ну это следствие доктрины юникс и линукс – все есть файл. Это чтоб ядро твой сокет нашло в списке открытых.

Буферы есть разные. Смотря о каком буфере речь. Часто это просто некий кусок памяти, где хранятся данные.

hibou ★★★★★
()
Ответ на: комментарий от mozgoff

ПОЛНОСТЬЮ qt и stl я не знаю, т.к они очень жирные

Сокеты намного сложнее всего перечисленного

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

Есть такая проблема: пока либо ты не сравнишь свою экспертизу с уровнем других экспертов, либо кто-то оценит тебя со стороны, либо ты достигнешь объективных результатов (например - используешь свои знания языка для написания софта, который хорошо работает), тяжело объективно оценить свой собственный уровень знаний. См. https://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect

Bfgeshka ★★★★★
()

полгода учу плюсы и технологии к нему, знаю qt, stl, sql, асинхронность, многопоточность. Во многих вакансиях указывают tcp, udp и тд, пытаюсь их учить, но получается очень плохо, вроде теорию знаю

Алсо, ты в декабре создавал тред, в котором ты вот что писал:

Посоветуйте книгу по плюсам,пишу на C++ примерно год, могу накалякать что нибудь на qt, недавно заинтересовался сетями(сокеты беркли, boost asio).

Bfgeshka ★★★★★
()
Ответ на: комментарий от Bfgeshka

Ну так всё сходится — первые полгода просто «писал», не приходя в сознание, что называется, потом начал учить плюсы :)

Знаю я таких «писателей». Раньше был такой способ разработки — копипастами со stackoverflow, а потом методом проб и ошибок, и такой-то матери, приведение этого кода к состоянию, когда он делает что-то похожее на то, что тебе нужно. Код, написанный таким способом лучше не видеть, во избежании травм. Сейчас это уже неактуально, таких «пейсателей» заменили GPT. При всей своей убогости в плане написания кода, результат всё же лучше, чем таким способом.

CrX ★★★★★
()

Сокет - это объект системы UNIX. Этот объект предоставляет возможность передавать данные последовательным потоком. Эту тему я разжевывал две недели. Сейчас я вам дам ссылки где детально расписаны по 4-5 раз модель Сокетов ее взаимодействие с моделью Kernel/Userspace и OSI.

Это огромная последовательность сообщений, где повторяется одно и то-же на разные лады: Сокет это интерфейс взаимодействия между Ядром и Userspace, а также взаимодействие между процессами (к концу последовательности).

Вот тут еще описывается TCP как поток, и как раз Сокеты используются как интерфейс к услугам протокола TCP.

Общий набор ссылок с схемами.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 2)
Ответ на: комментарий от hibou

Мусоропровод же только в одну сторону

Да, это я протупил.

Когда документ клали в круглый контейнер, наподобие банки, Закрывали и клали в трубу, трубу тоже закрывали и оно улетало куда труба ведет. Наверное тоже нечто одностороннее.

Можно с разных сторон давление подавать - получится двустороннее

annulen ★★★★★
()

Андрей Викторович Столяров преподавал 20 лет студентам и написал книги где детально и методично объяснил практику классического программирования под UNIX.

http://stolyarov.info/books/programming_intro

Вы сейчас просите объяснить вторую половину второго тома, 6 часть книги. И не известно чего из базиса вы не знаете. Берите и изучайте, у вас будет системное представление о вопросе.

А сейчас получается, что вы не освоив Алгебру 8 класса расспрашиваете о Интегралах.

lbvf50txt
()
Ответ на: комментарий от Stanson

Не, ну серьёзно, чо за ботва?

Это норма на форумах: отсутствие системного образования, поверхностный подход. Еще называется синдром Даннинга-Крюгера.

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

lbvf50txt
()

А разве нужно что-то знать кроме того TCP потоковый (приложение не видит в recv границ между send, а сплошной массив байт) и гарантирует порядок и доставку байт, а UDP датаграммный (на каждый send отдельный recv той же длины) и не гарантирует ни порядок, ни доставку (а ещё если пакет не пролазит в MTU в сетях по пути от отправителя к получателю, то с ним могут произойти ужасные вещи)? Ну а ещё UDP умеет broadcast в рамках сегмента сети.

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

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от mozgoff

Сокеты намного сложнее всего перечисленного

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

Для понимание вышеизложенного на выбор, а лучше вместе:

  • Читать Таненбаума.
  • Читать Столярова.
  • Поступить минимум в Техникум на специальность «Информационные системы и программирование» (09.02.07).

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

lbvf50txt
()
Ответ на: комментарий от Obezyan

Это прекрасно. И вы знаете как я ценю ваши аналогии, многоуважаемый @Obezyan. Но всё же, аналогии хороши когда есть базис, а тут базис на 0, надо идти и учиться в самом кондовом технаре или вузе.

Вы рассказали прекрасно, спору нет, красиво. Но неизбежно опускаясь до самого примитивного уровня убрали понятие порта (который как раз больше похож на почтовый ящик), убрали понятие процесса, убрали понятие «потока» - которое основное для всего UNIX. И не потому, что вы это не понимаете, как раз вы то шарите отлично, а потому что попытка впихнуть 1000 страниц в 1 страницу для того, кому лень учиться.

«Не хочу учиться, а хочу жениться!» давайте тут мне быстро расскажите устройство двигателя Камаза, завтра к отцу невесты иду на СТО помогать.

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

P.S.

Всё уже сделано «до нас», тут поднимаются темы из середины 90ых которые описал Таненабум, Робачевский, а окончательно отполировал Столяров - в чем он дока. Как раз в методологии преподавания базы.

Он все детально, последовательно, с самого самого 0, расписал, и на 1000 там какой-то странице вводит понятие Сокета, когда ученик уже работал с Файлами, знает базовый UNIX API, прослушал лекцию про OSI. И только тогда рассказывается про TCP/UDP и потом про Сокеты.

А вот так вот с 0 объяснить Сокет - ну это не реально. Это как объяснять Интегрирование в 5 классе.

P.P.S.

Человек явно пошел не с той стороны, он заходит со сверх сложного GUI, когда Сокеты являются продолжением CLI интерфейса и концепции UNIX процесса с 3-мя текстовыми потоками. Говоря по простому, пользователь поставил процесс обучения «с ног на голову».

Самый простой и понятный пример, третьекласснику который только только выучил таблицу умножения зайти на контрольную 8 класса по Тригонометрии. И узнавать, а что такое sin, и чем он отличается от cos. Тут тоже самое, с такими деталями как TCP и UPD, смешивая все в одну кучу и не имея базового представления о слоях OSI. Путая протокол, его услуги, его реализацию - все смешивая в один флакон с надписью «Сокет».

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 2)
Ответ на: комментарий от lbvf50txt

потому что попытка впихнуть 1000 страниц в 1 страницу

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

Метод никак не заменяет обучение, он облегчает понимание предмета во время обучения. Облегчает усвоение изученного, но не подменяет собой изучение.

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

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

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

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

Obezyan
()
Ответ на: комментарий от Obezyan

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

Проблема автора в том, что он «самоучка» в самом плохом смысле этого слова. Он не знает откуда начать, что делать, и пытается по скорей взять нахрапом 3-4 курс института.

Лечится это просто: походом в вуз, если нет денег в техникум, и уже самая последняя черта - чтением трехтомника Столярова воспринимая его как непререкаемого авторитета первые 5 лет - ЭМУЛЯЦИЯ ВУЗА НА ДОМУ. Или же https://uneex.ru/ - там тоже публикуют лекции, но Столяров системней.

Благо появился тип который методично и скрупулезно все лекции с практиками перепечатал и оформил в виде 4 pdf файлов. LOR тут и близко не помощник, надо встраиваться в среду студентов, а не спорщиков. Все что мы можем честно сказать: «Ты нифига не знаешь, иди туда там научат». И скорее всего нас объявят «душнилами» и никуда не пойдут.

Но! Но, мы поступили честно. Оказали помощь.

lbvf50txt
()

Hello ЛОР, полгода учу плюсы и технологии к нему

В плюсах (STL) нету сокетов, в Qt есть.

Во многих вакансиях указывают tcp, udp и тд, пытаюсь их учить

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

Skullnet ★★★★★
()
Ответ на: комментарий от Obezyan

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

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

Даже не так, нафиг они тогда нужны? Если сейчас 99% кода может накодировать даже бесплатная LLM. Сейчас чтение это базовый навык, просто умея читать можно парсить код передавая его LLM и задавая вопросы.

lbvf50txt
()
Ответ на: комментарий от Skullnet

В плюсах (STL) нету сокетов, в Qt есть.

Cокеты не в С++ и не в Qt они в ОС. Любая программа на любом языке программирования имеет доступ к Сокетам, также как она имеет доступ к Файлам. Файл - это такая абстракция предоставляемая ОС как и Сокет.

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

STL - это набор утилит для манипулирования данными в памяти. Ё моё пацаны, прочитайте вы методичку Столярова. Ну как так-то а? Это звиздец.

Раньше я скролил LOR думал, нифига тут типы шарят. А оказывается, тут нифига типы не шарят.

lbvf50txt
()
Ответ на: комментарий от lbvf50txt

Cокеты не в С++ и не в Qt они в ОС.

Речь была о том, что в C++ до сих пор не реализовано никакого интерфейса для TCP/UDP сокетов, а в Qt сделали. Не надо тут умничать.

Skullnet ★★★★★
()
Последнее исправление: Skullnet (всего исправлений: 1)
Ответ на: комментарий от lbvf50txt

В современном мире сокеты - прежде всего программный интерфейс. То, что сокет еще и тип файла в Unix - это дело десятое. Не во всех ОС это так.

Точно также можно сказать, что в C++11 есть треды, а в C++98 их нет (хотя они конечно же в ОС). В C++11 и выше можно писать кроссплатформенный многопоточный код, а в C++98 приходилось завязываться на системные вызовы ОС и получать зависимость от платформы.

Неужели Столяров этому не учит?

bigbit ★★★★★
()
Последнее исправление: bigbit (всего исправлений: 1)