Socket-Beispiele - WINSOCK nutzend
My_INET_DatabaseFunctions
Bei der Socketprogrammierung nutzt man Datenbasisfunktionen zur Adressenauflösung usw.. Es sollen die Datenbasisfunktionen und die entsprechenden Datenstrukturen angewendet werden.
- gethostbyname(), nutzend hostent, zur Ermittlung der IP-Adresse bei gegebenem Hostnamen
- gethostbyaddr(), nutzend hostent, zur Ermittlung des Hostnamens bei gegebener IP-Adresse.
- getserbyname(), nutzend servent, zur Ermittlung der Portnummer bei gegebenem Dienstname.
- getserbyport(), nutzend servent, zur Ermittlung des Dienstnamens bei gegebener Portnummer.
WSA_Startup_Cleanup
Beim Socket-API unter Windows müssen sich Anwendungen an- und abmelden.
Beim Anmelden werden Ressourcen allokiert, die beim Abmelden wieder frei gegeben werden.
Mittels der Struktur WSAData kann man die Eigenschaften des Socket-API ermitteln.
MyTime1_RFC868 WINSOCK_STREAM
Ziele dieses Beispiels sind:
- Kennen lernen des grundlegenden Umgangs mit dem Socket-API
- Umsetzung eines Protokolls in eine Anwendung anhand des Time-Protokolls RFC 868
- Nutzung von Standardfunktionen zur Zeit-/Datumsanzeige
MyTime2_RFC868 WINSOCK_STREAM
Ziele dieses Beispiels sind:
- Erweiterung des Beispiels MyTime1 durch Eingabemöglichkeit eines beliebigen Zeitservers
- Nutzung der Funktion gethostbyname() zur Auflösung der symbolischen Adresse auf die IP-Adresse.
- Nutzung der Datenstruktur hostent
MyTime3_RFC868 WINSOCK_DGRAM
Ziele dieses Beispiels sind:
- Funktion wie im Beispiels MyTime1, aber Verwendung eines DATAGRAM-Sockets.
- Ein Timeserver nach RFC 868 kann seinen Dienst sowohl über TCP als auch üner UDP anbieten.
- Während TCP Standard ist, wird UDP nur teilweise unterstützt.
MyEchoClient1 WINSOCK_STREAM
Ziele dieses Beispiels sind:
- Es soll ein String-Echo-Clt auf WINSOCK aufgesetzt werden.
- Der Client sendet an Server einen Text, der in Großbuchstaben gewandelt zurück gesendet wird.
- Der Server arbeite lokal auf Port 6666.
- Sein Hostname lautet "localhost" und seine IP-Adresse ist "127.0.0.1".
- VORAUSSETZUNG:
- Downloaden Sie zuerst die Serveranwendung "EchoServer.EXE" und starten diese, siehe unten.
- Danach downloaden Sie die beispielhafte ClientAnwendung "EchoClient.EXE".
- Testen Sie die Funktionalität indem Sie die Funktionen WSAStartup(), socket(), connect(), ... der Reihe nach aufrufen.
- Programmieren Sie anschließend eine eigene Anwendung "MyEchoClient1".
Voraussetzung für dieses Programmierbeispiel:
- Downloaden Sie zuerst die Serveranwendung "EchoServer.EXE" und starten diese.
- Der Server arbeite lokal auf Port 6666, seine IP-Adresse ist "127.0.0.1".
MyEchoClient2 WINSOCK_STREAM
Ziele dieses Beispiels sind:
- Dieses Beispiel ist eine Erweiterung von MyEchoClient1.
- Es soll ein String-Echo-Clt auf WINSOCK aufgesetzt werden.
- Der Client sendet an Server einen Text, der in Großbuchstaben gewandelt zurück gesendet wird.
- Die Serveranwendung soll aber auf einem beliebigen Host und Port laufen und der Sendetext soll variierbar sein.
MyFD_SET1
Vorbemerkung
- Wenn man eine Serveranwendung programmieren will, muß man den Serversocket und die Sockets der aktiven Verbindungen verwalten.
- Dazu nutzt man die Strukturen vom Typ fd_set und diverse API-Funktionen.
Ziele dieses Beispiels sind:
- Umgang mit der Struktur fd_set, in der alle Sockets vom API angezeigt werden, die zu lesen oder zu akzeptieren sind.
- Nutzung der API-Funktionen: FD_ZERO, FD_SET, FD_CLR, FD_ISSET
MyFD_SET2
Vorbemerkung
- In MyFD_SET1 lernten Sie den Umgang mit Strukturen vom Typ fd_set und der API-Funktionen: FD_ZERO, FD_SET, FD_CLR, FD_ISSET kennen.
Ziele dieses Beispiels sind:
- Nutzung der Funktion select() zur Überprüfung der Lesbarkeit/Schreibbarkeit von Sockets.
- Dazu wird das Beispiel MyEchoClt1 erweitert.
Beachten Sie, dass Sie zum Ausprobieren des Bespiels vorher den EchoServer downloaden und starten.
MyStringEchoSrv1_Select
Ziele dieses Beispiels sind:
- Die Programmierung einer Serveranwendung auf WINSOCK
- Ein Echoserver soll seinen Dienst am TCP-Port 6666 erbringen.
- Er soll ankommende Verbindungen entgegennehmen, die gesendeten Nachrichten zurüch an den Empfänger senden.
- Viele der Funktionen sind blockierend, deshalb wird vor dem Aufruf solcher Funktionen, die nicht-blockierende Funktion select() genutzt.
- select() wird im Poll-Mode aufgerufen.
MyStringEchoSrv2_Threads
Ziele dieses Beispiels sind:
- Die Programmierung einer Serveranwendung auf WINSOCK
- Ein Echoserver soll seinen Dienst am TCP-Port 6666 erbringen.
- Er soll ankommende Verbindungen entgegennehmen, die gesendeten Nachrichten zurüch an den Empfänger senden.
- Blockierende Funktionen accept() und recv() werden in einem Thread aufgerufen. Es blockiert der Thread aber nicht die Anwendung.