Mogę wyszukiwać i przeglądałem już wpis w Wikipedii oraz w niektórych innych miejscach, ale chociaż mam pewne doświadczenie w programowaniu, tak naprawdę nie rozumiem tego pojęcia. Czy możesz potraktować mnie jak 10-latka i podać jasne wyjaśnienie dotyczące komunikacji przez gniazdo?
20
Odpowiedzi:
Dam ci przykład: powiedz, że chcesz komunikować się / rozmawiać z przyjacielem, który nie mieszka pod twoim adresem. Aby tak się stało, musisz ustanowić „kanał komunikacyjny”. Powiedz, że chcesz wykonać tę komunikację za pomocą telefonów. Wiesz, że w mieście jest sieć linii telefonicznych, która obejmuje każdy dom.
Teraz w twoim domu jest gniazdo telefoniczne i jedno w domu twoich przyjaciół. Aby komunikacja mogła się odbyć, ty i twój przyjaciel musicie połączyć się z siecią, podłączając telefon do gniazda na obu końcach komunikacji. Gniazda w programowaniu są koncepcyjnie takie same jak gniazda telefoniczne.
W programowaniu masz dwa procesy (uruchomione programy), które chcą się ze sobą komunikować. W tym celu muszą ustanowić połączenie komunikacyjne między sobą. Ponownie dostępna jest sieć, wystarczy podłączyć się do tej sieci za pomocą pewnego rodzaju gniazd. Gniazda Unix są jednym z takich gniazd, które zapewniają tę łączność / możliwość podłączenia do sieci. Tak więc, w każdym z dwóch programów, będziesz miał kawałek kodu, który wykonuje połączenie z siecią przez gniazda.
Reszta to szczegóły.
źródło
Gniazda uniksowe są gniazdem dwukierunkowym - podobnie jak gniazdo oparte na IP, które zapewne znasz i podobne do potoku, który prawdopodobnie znasz.
Mają mały zestaw interesujących właściwości:
Zasadniczo są one odpowiednikiem każdego innego gniazda - mają nieco bardziej interesujące właściwości niż rury, ale poza tym nie różnią się radykalnie. Zazwyczaj mają one większe opóźnienie IPC niż potok i często większe bufory - chociaż możesz je dostroić i zależy to od platformy.
Ostatnią interesującą właściwością do zapamiętania jest to, że używają systemu plików jako przestrzeni nazw - więc są jak nazwany potok, a nie anonimowy potok, w tym oprogramowaniu bez wcześniejszego związku. (Abstrakcyjne gniazda przestrzeni nazw są takie same, ale ścieżka „pliku” nie musi istnieć).
Nie ma nic głębszego - nie mają żadnej super tajnej ukrytej właściwości, która radykalnie różni się od typowej potoku lub połączenia TCP z hostem lokalnym.
źródło
Programowanie gniazd Linuksa, Część 1: Używanie TCP / IP działało dla mnie całkiem dobrze. Zaczyna się od wprowadzenia do sieci IP i warstw sieciowych, a następnie pokazuje, jak zaimplementować prosty serwer echa i klienta w C i Pythonie.
źródło