Ich kann suchen und habe mir bereits den Wikipedia-Eintrag und einige andere Stellen angesehen, aber obwohl ich Programmiererfahrung habe, verstehe ich das Konzept nicht wirklich. Können Sie mich wie eine 10-jährige behandeln und mir eine klare Erklärung zur Socket-Kommunikation geben?
20
Antworten:
Lassen Sie mich Ihnen ein Beispiel geben: Angenommen, Sie möchten mit Ihrem Freund kommunizieren / chatten, der nicht an Ihrer Adresse wohnt. Dazu muss ein "Kommunikationskanal" eingerichtet werden. Angenommen, Sie möchten diese Kommunikation über Telefone durchführen. Sie wissen, dass es in der Stadt ein Telefonnetz gibt, das auf jedes Haus ausgedehnt ist.
Jetzt gibt es eine Telefonsteckdose in Ihrem Haus und eine in Ihrem Freundeshaus. Damit die Kommunikation stattfinden kann, müssen Sie und Ihr Freund eine Verbindung zum Netzwerk herstellen, indem Sie Ihr Telefon an beiden Enden der Kommunikation an die Steckdose anschließen. Die Programmierbuchsen sind konzeptionell mit den Telefonbuchsen identisch.
In der Programmierung haben Sie zwei Prozesse (laufende Programme), die miteinander kommunizieren möchten. Dafür müssen sie eine Kommunikationsverbindung zwischen sich herstellen. Auch hier steht ein Netzwerk zur Verfügung. Sie müssen lediglich eine Verbindung zu diesem Netzwerk über eine Art Socket herstellen. Unix-Sockets sind solche Sockets, die diese Konnektivität / Steckbarkeit für das Netzwerk bereitstellen. In jedem der beiden Programme gibt es also einen Code, der die Verbindung zum Netzwerk über Sockets herstellt.
Der Rest sind Details.
quelle
Unix-Sockets sind bidirektionale Sockets - genau wie ein IP-basierter Socket, mit dem Sie wahrscheinlich vertraut sind und der einer Pipe ähnelt, mit der Sie wahrscheinlich vertraut sind.
Sie haben einige interessante Eigenschaften:
Im Wesentlichen sind sie mit jeder anderen Muffe vergleichbar - sie haben etwas interessantere Eigenschaften als Rohre, unterscheiden sich aber ansonsten nicht grundlegend. Sie haben normalerweise eine höhere IPC-Latenz als eine Pipe und häufig größere Puffer - obwohl Sie dies möglicherweise tun können und dies von der Plattform abhängt.
Die letzte interessante Eigenschaft, die man sich merken sollte, ist, dass sie das Dateisystem als Namespace verwenden - also wie eine Named Pipe und nicht wie eine anonyme Pipe, in der Software ohne vorherige Beziehung kommunizieren kann. (Abstrakte Namespace-Sockets sind identisch, der Pfad "file" muss jedoch nicht vorhanden sein.)
Es gibt nichts Tieferes als das - sie haben keine supergeheimen versteckten Eigenschaften, die sie radikal von einer typischen Pipe oder einer TCP-Verbindung zu localhost unterscheiden.
quelle
Linux-Sockets programmieren, Teil 1: Die Verwendung von TCP / IP hat bei mir ganz gut funktioniert. Es beginnt mit einer Einführung in IP-Netzwerke und Netzwerkebenen und zeigt anschließend, wie ein einfacher Echoserver und -client in C und Python implementiert wird.
quelle