Winsock Tutorial

http://88.84.147.233/forum/index.php
Verfügbare Informationen zu "Winsock Tutorial"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: proxy88
  • Forum: http://88.84.147.233/forum/index.php
  • Forenbeschreibung: Neue Domain clx-projekt.dl.am hier drauf !!!!
  • aus dem Unterforum: Visual Basic
  • Antworten: 1
  • Forum gestartet am: Freitag 27.10.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Winsock Tutorial
  • Letzte Antwort: vor 17 Jahren, 5 Monaten, 27 Tagen, 11 Stunden, 43 Minuten
  • Alle Beiträge und Antworten zu "Winsock Tutorial"

    Re: Winsock Tutorial

    proxy88 - 29.10.2006, 15:11

    Winsock Tutorial
    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

    Der Server:
    Code:
    Option Explicit
     
      Private Sub Command1_Click()
       'winsock wird geschlossen
        Winsock1.Close

       'Der Port für den Server wird definiert
        Winsock1.LocalPort = Text1.Text

       'Server wartet auf einen Verbindung
        Winsock1.Listen
       
        Command1.Enabled = False
      End Sub

      Private Sub Command2_Click()
       'Chat
        Text3.Text = Text3.Text & "Server: " & Text4.Text & vbCrLf

        Text3.SelStart = Len(Text3.Text)

       'Ein Befehl plus Text werden gesendet
        Winsock1.SendData "msg" & Text4.Text
      End Sub

      Private Sub Timer1_Timer()
       'Label1 gibt den Status wieder
        Label1.Caption = Winsock1.State
      End Sub

      Private Sub Winsock1_Close()
        Text4.Enabled = False
        Command2.Enabled = False
        Command1.Enabled = True
      End Sub

      Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
       'Winsock wird geschlossen da es noch
       'auf verbindungen wartet
        Winsock1.Close

       'Eine Verbindung wird akzeptiert
        Winsock1.Accept requestID
     
        Text4.Enabled = True
        Command2.Enabled = True
      End Sub

      Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
      Dim Result As String

       'Die Variable result gibt die empfangenen Daten wieder;
       'Entweder die variable Result muss als String dim. werden
       'oder bei Winsock1.GetData Result muss hinten vbstring
       'dazugeschrieben werden
        Winsock1.GetData Result

       'Befehlauswertung
        Select Case Left(Result, 3)
       'Chat Befehl
        Case "msg"
          Text3.Text = Text3.Text & "Client: " & Mid(Result, _
                       4) & vbCrLf

          Text3.SelStart = Len(Text3.Text)
        End Select
      End Sub


    Der Client
    Code:
             Option Explicit

             Private Sub Command1_Click()
              'Winsock wird geschlosse
               Winsock1.Close
             
              'Die IP des Servers
               Winsock1.RemoteHost = Text1.Text
             
              'Der Port des Servers
               Winsock1.RemotePort = Text2.Text
             
              'Verbinde Winsock !
               Winsock1.Connect
             
               Command1.Enabled = False
             End Sub<br>




             Private Sub Command2_Click()
               Text3.Text = Text3.Text & "Client: " & Text4.Text _
                            & vbCrLf
               
               Text3.SelStart = Len(Text3.Text)
               
              'Ein Befehl plus Text werden gesendet
               Winsock1.SendData "msg" & Text4.Text
             End Sub

             Private Sub Timer1_Timer()
              'Label1 gibt den Status wieder
               Label1.Caption = Winsock1.State
             End Sub

             Private Sub Winsock1_Close()
               Text4.Enabled = False
               Command2.Enabled = False
               Command1.Enabled = True
             End Sub

             Private Sub Winsock1_Connect()
               Text4.Enabled = True
               Command2.Enabled = True
             End Sub

             Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
             Dim Result As String

              'Die Variable result gibt die empfangenen Daten wieder;
              'Entweder die variable Result muss als String dim. werden
              'oder bei Winsock1.GetData Result muss hinten vbstring
              'dazugeschrieben werden

               Winsock1.GetData Result

               Select Case Left(Result, 3) 'Befehlsauswertung
                 Case "msg" 'Chat Befehl
                   Text3.Text = Text3.Text & "Server: " & Mid(Result, _
                                4) & vbCrLf

                   Text3.SelStart = Len(Text3.Text)
                 End Select
             End Sub


    Orginal http://www.activevb.de/tutorials/tut_winsock_control/winsock_con.html
    Projekt als Downloadhttp://www.activevb.de/tutorials/tut_winsock_control/downloads/winsock.zip



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum http://88.84.147.233/forum/index.php



    Ähnliche Beiträge wie "Winsock Tutorial"

    TUTORIAL: Veränderung von Augenfarben (von maggie) - maggie (Donnerstag 16.08.2007)
    Tutorial charawechsel - Shino Aburame (Mittwoch 22.08.2007)
    Tutorial Schneiderladen - bacocab (Mittwoch 05.01.2005)
    Tutorial Glitzerschrift - ricky1 (Freitag 05.01.2007)
    Ventile einstellen Tutorial - LazyJones (Freitag 27.04.2007)
    C++ Tutorial - E-th4X[CREW] (Sonntag 30.07.2006)
    [Videotutorial] Adboard Creating Tutorial by =>N4P4sT4< - Fastdog [ad] (Donnerstag 22.02.2007)
    Metall-Avatar Tutorial (animiert) - oileee (Montag 04.06.2007)
    Fraps + Tutorial - Nonchi_NPL (Mittwoch 18.07.2007)
    TUTORIAL heute: wie man dateien runterlädt - Robin (Freitag 09.12.2005)