Gibt es größere Unterschiede zwischen "Socket-Programmierung" und "Netzwerk-Programmierung"?
Gibt es Themen, die sich mit "Netzwerkprogrammierung" befassen, aber nicht mit "Socket-Programmierung"?
Gibt es größere Unterschiede zwischen "Socket-Programmierung" und "Netzwerk-Programmierung"?
Gibt es Themen, die sich mit "Netzwerkprogrammierung" befassen, aber nicht mit "Socket-Programmierung"?
Antworten:
Socket-Programmierung (zumindest wie der Begriff normalerweise verwendet wird) ist die Programmierung auf eine bestimmte Netzwerk-API. Sockets unterstützen IP-basierte Protokolle (hauptsächlich TCP und UDP) 1 .
Die Netzwerkprogrammierung kann über verschiedene andere APIs erfolgen. Windows verfügt über eine Reihe von protokollunabhängigen APIs, z. B. die Funktionen WNet * und Net *. Ältere Versionen von Windows verwendeten ebenfalls NetBIOS / NetBEUI (NetBIOS End User Interface) und die meisten unterstützten (und wahrscheinlich immer noch) IPX / SPX (ein altes Netware-Protokoll).
Die meisten aktuellen Netzwerkprogramme werden jedoch entweder direkt über Sockets oder auf verschiedenen Ebenen über Sockets ausgeführt (z. B. wird viel über HTTP ausgeführt, was normalerweise mit TCP über Sockets implementiert wird). TCP / IP und UDP / IP (sowie eine Reihe anderer IP-basierter Protokolle) werden hauptsächlich über die Sockets-Schnittstelle ausgeführt. Theoretisch könnten andere Programmierschnittstellen verwendet werden, aber in der Praxis scheinen die Steckdosen ausreichend zu sein, so dass kein großes Interesse besteht, sie zu ersetzen. Ich sollte jedoch erwähnen, dass Windows-Sockets (WinSock) einige Erweiterungen haben, die mehr oder weniger einzigartig für Windows sind. Ich nehme an, es ist fraglich, ob Code, der diese Erweiterungen verwendet, tatsächlich als "Sockets" -Code qualifiziert ist oder nicht - es handelt sich um Erweiterungen, die auf denselben Konzepten basieren, aber Code, der sie verwendet, ist nicht ' t normalerweise auf andere Systeme übertragbar. Ich denke, ob es sich um "Sockets" handelt oder nicht, hängt in erster Linie davon ab, ob Sie Sockets eher als Konzept oder als einen ganz bestimmten Satz von Funktionen, Parametern usw. ansehen.
Bearbeiten (als Antwort auf den Kommentar):
Es ist ein bisschen schwer zu sagen, ob "Sockets kennen" bedeutet, "alles" über TCP und UDP zu wissen. Betrachten wir nur ein kleines Stück: Ein typisches Demo-Programm für Sockets ist das Erstellen eines Client / Server-Chat-Programms. Der Client stellt eine Verbindung zum Server her, und wenn der Benutzer auf einem Client etwas eingibt, wird er an die anderen Clients weitergeleitet, die mit demselben Server verbunden sind. Jeder Client zeigt an, was vom Server eingeht, und lässt den Benutzer Nachrichten eingeben, die an die anderen Clients gesendet werden sollen.
Bedenken Sie gleichzeitig, was ein "echtes" Chat-Programm wie AIM, Windows Messenger, iChat usw. beinhaltet. Ein typisches Programm, das nicht nur Text, sondern auch Sprache, Video, Dateiübertragungen, Gruppen, Listen usw. verarbeitet, umfasst wahrscheinlich ein Dutzend verschiedener Standards, darunter SIP, STUN, TURN, RTCP, RTP, XAMPP, mDNS usw .
IMO, jemand, der "Sockets kennt", sollte in der Lage sein, das erste Chat-Programm (Demo-Level, nur Text) in wenigen Stunden zu programmieren, ohne viel Zeit in Hilfedateien (und dergleichen) zu investieren, die Nachforschungen anstellen. Ich würde nicht erwarten, dass sie überhaupt wissen, welche RFCs / Standards für solche Dinge gelten, es sei denn, sie haben zumindest einige Vorkenntnisse in der Arbeit an einem "echten" Chat-Programm.
Das Gleiche gilt im Allgemeinen: Angesichts der Anzahl der RFCs (und verschiedener anderer Standards), die auf all die verschiedenen Aktionen angewendet werden, die Menschen über Netzwerke ausführen, ist es unvernünftig zu erwarten, dass sich jemand alle auswendig gelernt hat. Wenn Sie jedoch eine Reihe von Anforderungen für etwas haben, von dem Sie erwarten, dass die Benutzer in einem "lokalen" Programm problemlos damit umgehen können, sollte das Hinzufügen von "über das Netzwerk" als Anforderung normalerweise keine enormen Schwierigkeiten mit sich bringen (obwohl der Umgang mit Problemen wie Netzwerklatenz möglicherweise).
1 Sockets unter Unix unterstützen auch Sockets der Unix-Familie, diese werden jedoch (zumindest normalerweise) für IPCs innerhalb der Maschine verwendet, nicht für Netzwerke. Es gibt auch buchstäblich Dutzende anderer Protokolle für Dinge wie Router-Management, die Sockets nicht wirklich unterstützen (über Raw-Sockets hinaus, mit denen Sie beliebige Pakete erstellen und senden können).
"Netzwerkprogrammierung" erfordert einige Netzwerktechnologien - beispielsweise RPC. Ein Beispiel für diese Technologie sind Sockets (wahrscheinlich BSD-Sockets). "Socket-Programmierung" ist also eine Teilmenge der "Netzwerkprogrammierung".
Ja, es stimmt, dass die Netzwerkprogrammierung Netzwerktechnologie erfordert, während die Socket-Programmierung eine Teilmenge der Netzwerkprogrammierung ist. Die meisten aktuellen Netzwerkprogramme werden entweder direkt über Sockets oder über verschiedene andere Ebenen über Sockets ausgeführt.