vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Fragen zu simplen Client-Server Beispiel mit TCP/IP 
Autor: dani3l87
Datum: 24.09.09 22:08

Hallo,

ich habe heute versucht das erste Mal eine Netzwerkapplikation zu basteln. Dazu habe ich mit einem Dokumentierten Beispiel angefangen. Dieses funktioniert auch soweit, jedoch habe ich dazu mehrere Fragen. Ich habe natürlich schon selbst recherchiert, wodurch ich mir einige Fragen auch schon selbst beantworten konnte. Die restlichen kommen jetzt. Um meine Fragen besser stellen zu können poste ich erstmal den Code des Servers und Clients:

SERVER
      Dim serverSocket As New Socket(Net.Sockets.AddressFamily.InterNetwork, _
        Net.Sockets.SocketType.Stream, Net.Sockets.ProtocolType.IP)
      Dim clientsocket As Socket
 
      Dim serverAddress As IPAddress = Dns.GetHostAddresses(Dns.GetHostName)(1)
      Dim localEP As New IPEndPoint(serverAddress, 930)
      serverSocket.Bind(localEP)
 
      Try
         'Socket aktivieren und auf Clientanruf warten
         serverSocket.Listen(1)
         Console.WriteLine("Ich warte auf einen Client...")
 
         'Clientanfrage akzeptieren und einen clientspezifischen Socket anlegen
         clientsocket = serverSocket.Accept()
         Console.WriteLine("Verbindung zu einem Client enrfolgreich aufgebaut")
 
         'Ausgabe der Verbindungsdaten zum Client
         Dim port As Int32 = CType(clientsocket.RemoteEndPoint, IPEndPoint).Port
         Dim tcpip As String = CType(clientsocket.RemoteEndPoint, _
           IPEndPoint).Address.ToString
         Console.WriteLine("Remote Daten: {0}/Port {1}", tcpip, port)
         port = CType(clientsocket.LocalEndPoint, IPEndPoint).Port
         tcpip = CType(clientsocket.LocalEndPoint, IPEndPoint).Address.ToString( _
           )
         Console.WriteLine("Lokale Daten: {0}/Port {1}", tcpip, port)
 
      Catch ex As Exception
         Console.WriteLine(ex.ToString())
      Finally
         clientsocket.Close()
      End Try
CLIENT
      Dim serverSocket As New Socket(Net.Sockets.AddressFamily.InterNetwork, _
        Net.Sockets.SocketType.Stream, Net.Sockets.ProtocolType.IP)
 
      Dim serverAddress As IPAddress = Dns.GetHostAddresses("MeinRechnerName")( _
        1)
      Dim remoteEP As New IPEndPoint(serverAddress, 930)
 
      Try
         'Verbindung zum TCP-Server aufnehmen
         serverSocket.Connect(remoteEP)
         Dim port As Int32 = CType(serverSocket.RemoteEndPoint, IPEndPoint).Port
         Dim tcpip As String = CType(serverSocket.RemoteEndPoint, _
           IPEndPoint).Address.ToString
         Console.WriteLine("Lokale Daten: {0}/Port {1}", tcpip, port)
      Catch ex As Exception
         Console.WriteLine(ex.ToString)
      Finally
         serverSocket.Close()
      End Try
So nun zu den Fragen.

Bei der Server Applikation muss ich den serverSocket an meine IP-Adresse und einen von mir frei wählbaren Port binden.
Dazu muss ich erstmal meine IP-Adresse herausfinden. Im Beispielcode stand „Dns.GetHostAddresses(Dns.GetHostName)(0)“ und es wurde gesagt man soll einfach immer als Index 0 nehmen. Wenn ich das allerdings mache bekomme ich einen Fehler.
Wenn ich mit dem Debugger Dns.GetHostAddresses(Dns.GetHostName)(0).ToString auswerte bekomme ich etwas, das keiner IP-ähnliche ist.
Woher weiß ich nun welchen Index ich wählen muss. Bei mir passt Index 1, vielleicht bei einem Freund Index 0 oder 2.

Des weiteren habe ich auch bei folgendes Wikipedia gelesen:
„Im Beispiel von TCP/IP und UDP/IP ist bei einer Wildcard-Adresse nur die Port-Nummer relevant, es wird eine spezielle (ungültige) IP-Adresse angegeben, um zu signalisieren, dass Verbindungen auf allen IP-Adressen akzeptiert werden sollen.“
Dies ist natürlich viel besser als meine IP zu bestimmen. Gibt es auch eine Möglichkeit ein IPAdress-Objekt zu erstellen, das einer Wildcard-Adresse entspricht?

Nun zu meiner nächsten Fragen. Ich habe mir das Socket Konzept mehrmals durchgelesen und finde die Namengebung mehr als verwirrend. Ich will nun sichergehen, das ich das Konzept auch richtig verstanden habe.
Im Server code wird ja eine Variable clientsocket definiert. Doch das ist doch nicht der socket vom Client? Das ist doch immer noch ein serverSocket. Nur das dieser speziell für den neuen Client erzeugt wurde. Also ist das doch eher sowas wie serverSocket2? Hier ist das aber mit dem Namen nicht ganz so schlimm, womit ich aber gar nicht klarkomme ist im Client.
Warum wählt man hier den Namen serverSocket? Ich erstelle doch einen clientSocket und verbinde mit diesem zu der entsprechenden Adresse???

Und jetzt die letzte Frage. Ein Socket hat doch nicht zwei Enden?? Also was ist den dann bitte RemoteEndPoint und LocalendPoint.
Also soweit ich das verstanden habe hat beim server(code) der serversocket immer Port 930 und der clientSocket immer einen anderen als 930, sagen wir mal X. Und genau diesen müsste der serversocket im client(code) auch haben. Spielt man aber mit LocalendPoint und RemoteEnd Point so erhält man mal den mal den. Ich blicke da echt nicht durch.

Vielen Dank für alle Antworten !!!!!!!!
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Fragen zu simplen Client-Server Beispiel mit TCP/IP3.437dani3l8724.09.09 22:08
Re: Fragen zu simplen Client-Server Beispiel mit TCP/IP2.539ModeratorRalf Ehlert25.09.09 00:50
Re: Fragen zu simplen Client-Server Beispiel mit TCP/IP2.506Manni0125.09.09 10:19
Re: Fragen zu simplen Client-Server Beispiel mit TCP/IP2.508dani3l8725.09.09 11:44
Re: Fragen zu simplen Client-Server Beispiel mit TCP/IP2.605Manni0125.09.09 11:49

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel