| Bevor das eigentlichem Tutorial über das Winsock - Steuerelement anfängt, folgt zuerst eine kleine Lehre über das Internet: Im Internet hat jeder PC eine Anschlussnummer, die als IP (=Internet-Protokoll) bezeichnet wird. Ein IP-Adresse ist 32Bit lang und hat das format ****.****.****.****, dabei entspricht jeder Wert einer Zahl im Bereich 0 - 255. Ein Provider vergibt (meistens) jedes Mal, wenn sich der User neu einwählt eine neue IP-Adresse. Da man sich die Zahlen der IP Adressen so schlecht merken kann, fing man an, IP Adressen Namen zu vergeben. Diese Technik nennt man Domänennamen. Eine zulässige Domäne ist z.b. http://www.activevb.de; dabei ist das .de die Top-Level Domäne oder Domäne höchster Ebene. Ander Top-Level Domains sind z.B.: .edu für education , .gov für government, .com für commercial, .NET für network, .org für organisation usw... www steht für world-wide-web; http (HyperText Transfer Protocol) ist das im Internet verwendete Protokoll um sich Site/Pages anzusehen. Da alle Information, die über das Internet versendet werden, eine gültige IP-Adresse verwenden müssen, muss es auch einen Prozess geben eine Domäne in eine IP Adresse umzuwandeln. Diesen Prozess nennt man Domain Name Server (DNS). Wenn ihr PC mit dem Internet verbunden ist, dann hat er für den DNS entweder eine feste IP Adresse oder bekommt von ihrem Provider eine dynamische zugewiesen. Um Informationen über das Internet auszutauschen, genügt es nicht, zu wissen wie die IP des Remotes (des anderen PCs) ist. Einige Dienste im Internet stellen mehrer Services zur Verfügung. Daher muss es eine Möglichkeit geben, wie man mehrer Anwendungen auf einem PC mit einer IP Adresse laufen lassen kann. Das geschieht über Anschlussnummern (engl. Ports) Eine Anschlussnummer ist einfach eine weitere Adresse, die sich auf den jeweiligen PC bezieht. Anschlussnummern können Nummern von 0 bis 65.535 verwenden. So gibt es für die verschiedenen Protokolle reservierte Anschlussnummern, z.B.: für das http- Protokoll den Port 80. Im Laufe der Jahre haben sich die Benutzer auf jeweilige Protokolle geeinigt. Um z.B.: ein HTML Dokument abzurufen, verwendet man das http - Protokoll. Weiter: | Port | Name | Beschreibung | | 13 | Daytime | Datum/Uhrzeit Protokoll | | 20 | ftp-data | FTP(File-Transfer-Protocoll);darüber werdenDateien zw. Systemen ausgetauscht | | 21 | ftp | FTP, Steueranschluss | | 23 | Telnet | Telnet- Stellt einen Terminal Zugriff auf einem Remote-PC zur Verfügung | | 25 | smtp | SMTP(Simple Mail Transport Protocol)- Überträgt E-mail nachrichten zw. Systemen | | 37 | Time | Zeitprotokoll | | 53 | Domain | DNS- Konvertiert einen Domänennamen in eine IP-Adresse | | 79 | Finger | Finger-Protokoll - Gibt Informationen über einen Remote-Computer oder einen remote Anwender zurück | | 80 | www-http | WWW, http - Ruft Dokumente im HTML Format ab | | 110 | Pop3 | POP3 (Post office Protocol) - ruft E-Mail-nachrichten ab | | 119 | nntp | NNTP (Network News Transport Protocol) ruft News Artikel ab | Protokolle dienen den PC dazu, Informationen bei einem andern PC anzufordern und dessen Antwort auch zu verstehen. Protokolle sind in erster Linie gut dokumentierte Befehlsketten und eine reihe zulässiger Antworten. Alle Protokolle basieren auf dem TCP oder UDP Protokoll - TCP steht für Transmission Control Protocol und erstellt eine virtuelle Verbindung zw. zwei PCs.
- UDP steht für User Datagram Protocol. Dies ist eine Verbindungsloses Protokoll, das eine nachricht von einem PC zu dem anderen sendet ohne Garantie dass es auch wirklich ankommt.
Ein wichtiger Unterschied zw. TCP und UDP besteht darin, dass TCP eine bestehende verbindung zu einem PC braucht um Daten zu senden, während UDP das nicht braucht. So jetzt genug gelehrt ;) Jetzt kommen wir zum eigentlichem Thema: das Winsock Steuerelement. Winsock ist eine Name, der aus Windows Sockets entstanden ist. Es ist eine ActiveX Komponente von Microsoft und auf der Toolbar mit einem rechten Mausklick unter Komponenten "Microsoft Winsock Control" einzufügen. Mit Winsock ist es möglich, sich mit einem anderen PC zu verbinden (Client/Server) oder auf einen Verbindung zu warten (Server/Client). Wir halten uns auf das Sprichwort "learning by doing" und zögern nicht lange. Da fast alle Anwendungen nur das TCP Protokoll unterstützen (darunter auch diejenigen, die zusätzlich UDP unterstützen) verwenden wir diesen Protokoll. Mit dem Eigenschaften des Winsock - Steuerelementes könne sie die Socket Verbindung konfigurieren: | Eigenschaft | Beschreibung | | BytesReceived | Gibt die Anzahl der Bytes im Empfangpuffer wieder. | | LocalHostName | Gibt den Namen des lokalen PCs wieder. | | LocalPort | Gibt die Anschlussnummer, die verwendet wird, wieder. | | Protocol | Gibt entweder TCP oder UDP an. | | RemoteHostIP | Gibt die IP - Adresse des Remotes wieder. | | RemoteHost | Gibt den Namen des Remotes wieder. | | RemotePort | Gibt die verwendete Anschlussnummer des Remotes wieder. | | SocketHandle | Gibt einen Verweiß auf die darunterliegende Winsock - API - Zugriffsnummer wieder. | | State | Gibt den Status des Steuerelements an. | *Achtung: Die Eigenschaft enthalt gegebenenfalls die Netzwerk IP Adresse nicht den Internet IP! Die Eigenschaft State gibt den aktuellen Status über die Verbindung an. Sie kann folgende Werte haben: | Status | Wert | Beschreibung | | SckClosed | 0 | Der Socket ist geschlossen | | SckOpen | 1 | Der Socket ist geöffnet | | SckListening | 2 | Der Socket ist empfangsbereit | | SckConnectionPending | 3 | Die Verbindung wird aufgebaut | | SckResolvingHost | 4 | Der Remote-Host-Name wird in eine IP-Adresse umgewandelt | | SckHostResolve | 5 | Der Remote-Host-Name wurde in eine IP-Adresse umgewandelt | | SckConnecting | 6 | Der Socket verbindet sich zu dem Remote | | SckConnected | 7 | Der Socket hat sich zu dem Remote verbunden | | SckClosing | 8 | Der Remote hat die Verbindung getrennt | | SckError | 9 | Ein Fehler ist aufgetreten | Die Eigenschaften LocalHostName und LocalIP sind schreibgeschützt und können nicht verändert werden. Die IP Adresse kann nur vom Provider geändert werden! Mit der Eigenschaft RemoteHostIP kann die IP Adresse des Remotes angegeben werden. RemoteHostName kann auch einen Domänennamen beinthalten,Winsock wandelt ihn selbstständig in eine IP Adresse um! Server/Client: Um eine Server(Zuhörer)/Client(Verbinder) zu entwickeln, müssen folgende Schritte beachtet werden: Server: - Ein Port muss reserviert werden
- Der RemotePort muss definiert werden
- Eine Verbindung muss Aktzeptiert werden
Client: - Der RemoteIP muss eingegeben werden
- Die Connect-Methode (Events) muss ausgelöst werden
- Eine Verbindung muss Aktzeptiert werden
Folgende Methoden umfasst das Winsock Steuerelement: | Methode[Event] | Beschreibung | | Accept | Akzeptiert eine Anfrage im Connection_Request Ereignis | | Bind | Wählt den lokalen Netzwerk-Adapter und die lokale Anschlussnummer aus | | Close | Schließt das Socket | | Connect | Baut eine TCP-Verbindung zu dem Remote auf | | GetData | Empfängt die Daten aus dem Empfangsbuffer und leert ihn | | Listen | Wartet auf eine Verbindung | | PeekData | Empfängt Daten von dem Empfangspuffer, leert ihn aber nicht | | SendData | Sendet Daten auf den Remote | Die Listen Methode funktioniert nur beim TCP-Protokoll. Die Methode wartet, bis sich jemand verbindet und löst dann das Connection_Request Ereignis aus. Mit Accept und der aktuellen requestID steht die Verbindung dann. Die Connect Methode ist ebenfalls für das TCP-protokoll gedacht, mit dem eine Verbindung aufgebaut werden kann. Sobald die Verbindung erstellt ist, löst sich das Ereignis Connect aus. Die Ereignisse auf einen Blick: | Event | Beschreibung | | Close | Wird ausgelöst, wenn der Remote eine TCP Verbindung trennt | | Connect | Wird ausgelöst, wenn eine Verbindung zum Server hergestellt ist | | ConnectionRequest | Wird ausgelöst, wenn sich eine Verbindung anbahnt | | DataArrival | Wird ausgelöst, wenn vom Remote Daten empfangen werden | | Error | Wird ausgelöst, wenn eine Fehlerbediendung eintritt | | SendComplete | Wird ausgelöst, wenn die Datenübertragung zum Remote abgeschlossen ist | | SendProgress | Wird periodisch während einer Datenübertragung ausgelöst | |