In C wird ein Socket über einen Filedeskriptor angesprochen, welches eine natürliche Zahl vom Typ int ist. Man kann diesen Filedeskriptor sowohl zum Lesen als auch zum Schreiben benutzen, indem man ihn als Argument in den Funktionen der stdio Bibliothek angibt. Beim Lesen kommen die Daten vom verbundenen Remote-Socket und beim Schreiben gehen Sie an den verbundenen Remote-Socket. Man benutzt aber zum Lesen und Schreiben immer den Lokalen Socket, weil nur dieser im Betriebsystem real vorhanden ist. Nur semantisch liest und schreibt man vom bzw. zum Remote-Socket.
Eine bestehende Kommunikationsverbindung von zwei Anwendungen mittels Sockets läßt sich extern als ein Socketpaar definieren.
In Windows wird ein verbundener Socket mit dem Befehl
netstat -np tcpangezeigt.
Dabei könnte man die Remoteadresse im lokalen Socket als Remote Socket interpretieren. Der Remote-Socket ist allerdings als virtuell anzusehen, da er nur auf dem Remote System existiert. In dieser Interpretation hätte man direkt die Darstellung der Verbindung als Socket-Paar, wobei jeder Socket mit seiner Absenderadresse dargestellt wird.
Die Erzeugung und Verbindung von Sockets unterscheidet sich nach der Art der Verbindungsherstellung:
Für Server gilt:
- int socket(PF_INET, SOCK_STREAM, 0) -- gibt Filedskriptor für erzeugten Socket zurück (bsp 7)
- int bind(7,<Adresse von Struktur wo lokale IP+Port steht>,<größe der Struktur>) -- Rückgabe Fehlercode
- int listen(7,<Anzahl erlaubter gleichzeitiger Verbindungsgesuche von Clients>) -- Rückgabe Fehlercode
- int accept(7,<Adresse von Struktur wo remote IP+Port gespeichert werden soll>,<größe der Struktur>) -- gibt Filedeskriptor von neuem in Verbindung stehendem Socket zurück (bsp 40)
Für Clients gilt:
- int socket(PF_INET, SOCK_STREAM, 0) -- gibt Filedskriptor für erzeugten Socket zurück (bsp 10)
- int connect(10,<Adresse von Struktur wo remote IP+Port steht>,<größe der Struktur>) -- Rückgabe Fehlercode
Wenn in Java auf einem Server folgende Notation benutzt wird
Socket clientSocket = serverSocket.accept();dann soll mit "clientSocket" nur zum Ausdruck gebracht werden, dass die Quelle und das Ziel von Lese-Schreib-Vorgängen ein Remote-Client Socket ist. Real wird aber nur der existierende lokale Socket benutzt, der bzgl. lokaler Adresse mit
serverSocketübereinstimmt, jedoch noch zusätzlich eine gültige remote Adresse aufweist. Es ist diesbezüglich auch ein neu erzeugtes Socket-Objekt.
Keine Kommentare:
Kommentar veröffentlichen