Czy są jakieś zasadnicze różnice, gdy mówimy o „programowaniu gniazd” w porównaniu do „programowania sieciowego”?
Czy są jakieś tematy, które obejmują „programowanie sieciowe”, ale nie „programowanie przez gniazdo”?
Czy są jakieś zasadnicze różnice, gdy mówimy o „programowaniu gniazd” w porównaniu do „programowania sieciowego”?
Czy są jakieś tematy, które obejmują „programowanie sieciowe”, ale nie „programowanie przez gniazdo”?
Odpowiedzi:
Programowanie przez gniazda (przynajmniej tak, jak zwykle używa się tego terminu) to programowanie do jednego konkretnego sieciowego interfejsu API. Gniazda obsługują protokoły IP (głównie TCP i UDP) 1 .
Programowanie sieciowe można wykonać przy użyciu różnych innych interfejsów API. System Windows ma wiele niezależnych od protokołu interfejsów API, takich jak funkcje WNet * i Net *. Starsze wersje systemu Windows również używały NetBIOS / NetBEUI (interfejs użytkownika końcowego NetBIOS), a większość obsługiwanych (i prawdopodobnie nadal działa) IPX / SPX (stary protokół Netware).
Większość obecnych programów sieciowych jest jednak wykonywana albo bezpośrednio przy użyciu gniazd, albo przy użyciu różnych innych warstw na wierzchu gniazd (np. Całkiem sporo odbywa się za pośrednictwem protokołu HTTP, który zwykle jest implementowany za pomocą TCP przez gniazda). TCP / IP i UDP / IP (a także szereg innych protokołów opartych na IP) są wykonywane przede wszystkim za pośrednictwem interfejsu gniazd. Teoretycznie można użyć innych interfejsów programistycznych, ale w praktyce gniazda wydają się wystarczające, więc nie ma dużego zainteresowania ich wymianą. Powinienem jednak wspomnieć, że gniazda systemu Windows (WinSock) mają całkiem sporo rozszerzeń, które są mniej więcej unikalne w systemie Windows. Podejrzewam, że jest otwarty na jakiś argument, czy kod korzystający z tych rozszerzeń naprawdę kwalifikuje się jako kod „gniazd”, czy nie - są to rozszerzenia oparte na tych samych pojęciach, ale kod, który ich używa, nie jest t zwykle przenośny do innych systemów. Domyślam się, czy kwalifikuje się jako „gniazdo”, czy nie, zależy przede wszystkim od tego, czy myślisz o gniazdach bardziej jako koncepcji, czy o bardzo specyficznym zestawie funkcji, parametrów itp.
Edytuj (w odpowiedzi na komentarz):
Trudno powiedzieć, czy „znajomość gniazd” oznacza znajomość „wszystkiego” na temat TCP i UDP. Rozważmy tylko jeden drobiazg: jednym typowym programem demonstracyjnym dla gniazd jest tworzenie programu czatu klient / serwer. Klient łączy się z serwerem, a gdy użytkownik na jednym kliencie coś wpisze, zostaje przekierowany do innych klientów podłączonych do tego samego serwera. Każdy klient wyświetla informacje przychodzące z serwera i pozwala użytkownikowi wpisywać wiadomości, które mają być wysyłane do innych klientów.
Jednocześnie zastanów się, na czym polega „prawdziwy” program do czatowania, taki jak AIM, Windows Messenger, iChat itp. Do obsługi nie tylko tekstu, ale także głosu, wideo, przesyłania plików, grup, list itp., Typowy program prawdopodobnie obejmuje kilkanaście różnych standardów, w tym takie rzeczy jak SIP, STUN, TURN, RTCP, RTP, XAMPP, mDNS itp. .
IMO, ktoś, kto „zna gniazda”, powinien być w stanie zakodować pierwszy program do czatowania (na poziomie demonstracyjnym, tylko tekstowy) w ciągu kilku godzin, nie poświęcając dużo czasu na pliki pomocy (i takie) na prowadzenie badań. O ile nie twierdzą, że przynajmniej mieli jakieś wcześniejsze doświadczenie w pracy nad „prawdziwym” programem do czatowania, nie spodziewałbym się, że nawet dowiedzą się, które RFC / standardy mają zastosowanie do takich rzeczy.
To samo dotyczy ogólnie: biorąc pod uwagę liczbę RFC (i różne inne standardy), które stosuje się do wszystkich różnych rzeczy, które ludzie robią w sieciach, nie można oczekiwać, że ktoś zapamięta je wszystkie. Niemniej jednak, jeśli masz zestaw wymagań dotyczących czegoś, czego oczekujesz, że ludzie będą w stanie łatwo obsłużyć program „lokalny”, po prostu dodanie „przez sieć” jako wymagania nie powinno zazwyczaj stanowić ogromnej trudności. (choć radzenie sobie z takimi problemami, jak opóźnienie sieci).
1 Gniazda w Uniksie również obsługują gniazda z rodziny Uniksów, ale są one (przynajmniej normalnie) używane do IPC wewnątrz maszyny, a nie do sieci. Istnieją również dosłownie dziesiątki innych protokołów dla takich rzeczy jak zarządzanie routerem, których gniazda tak naprawdę nie obsługują (poza gniazdami surowymi, umożliwiającymi tworzenie i wysyłanie dowolnych pakietów).
„programowanie sieciowe” będzie wymagało pewnej technologii sieciowej - na przykład RPC. Gniazda (najprawdopodobniej masz na myśli gniazda BSD) są przykładem takiej technologii. Zatem „programowanie przez gniazdo” jest podzbiorem „programowania przez sieć”.
Tak, to prawda, że programowanie sieciowe wymaga technologii sieciowej, podczas gdy z drugiej strony programowanie gniazd jest podzbiorem programowania sieciowego. Większość obecnych programów sieciowych odbywa się albo bezpośrednio przy użyciu gniazd, albo przy użyciu różnych innych warstw na wierzchu gniazd.