vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: HTML/Internet/Netzwerk · Netzwerk   |   VB-Versionen: VB2005, VB200818.08.10
TCP/IP-Streams verwenden

Es kommt immer wieder vor, dass man Daten an einen anderen PC oder Server übermitteln möchte: Dafür eignen sich Streams perfekt. Mit dieser Klasse geht es ganz einfach.

Autor:   Niel WagensommerBewertung:  Views:  16.004 
ohne HomepageSystem:  Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Es kommt immer wieder vor, dass man Daten an einen anderen PC oder Server übermitteln möchte: Dafür eignen sich Streams perfekt.

Als erstes werden diese Importe benötigt:

Imports System.Net
Imports System.Net.Sockets

Danach der Kopf der Klasse und die Deklarationen:

''' <summary>
''' Stellt Funktionen zum Verbinden mit TCP/IP-Servern bereit
''' </summary>
''' <remarks></remarks>
Public Class TcpIPConnection
  Private Connection As TcpClient

Die Funktion zum öffnen der Verbindung kann wie folgt implementiert werden:

  ''' <summary>
  ''' Öffnet einen TCP/IP-Stream zur angegebenen IP-Addresse
  ''' </summary>
  ''' <param name="IP">IP-Addresse des Servers</param>
  ''' <param name="Port">Zu benutzender Port</param>
  ''' <returns>Daten-Stream der Verbinung</returns>
  ''' <remarks></remarks>
  Public Function OpenConnection(ByVal IP As IPAddress, ByVal Port As Integer) As NetworkStream
    Connection = New TcpClient()               ' Verbindung initialisieren
    Connection.Connect(IP, Port)               ' Verbinden (synchron)
    Connection.SendTimeout = 500               ' Spätestens nach 500 Millisekunden senden
    Connection.SendBufferSize = 1048576        ' 1 Megabyte Puffer für ausgehende Daten
    Connection.ReceiveBufferSize = 10485760    ' und 10 Megabyte für einkommende
    Return Connection.GetStream                ' Stream öffnen
  End Function

Falls man die IP des Servers nicht weis, helfen diese Überladungen weiter:

  ''' <summary>
  ''' Öffnet einen TCP/IP-Stream zur angegebenen IP-Addresse
  ''' </summary>
  ''' <param name="Server">Name des Servers</param>
  ''' <param name="Port">Zu benutzender Port</param>
  ''' <returns>Daten-Stream der Verbinung</returns>
  ''' <remarks></remarks>
  Public Function OpenConnectionByServer(ByVal Server As String, ByVal Port As Integer) As NetworkStream
    ' IP finden und Verbinden
    Return OpenConnection(Dns.GetHostEntry(Server).AddressList(0), Port)
  End Function
  ''' <summary>
  ''' Öffnet einen TCP/IP-Stream zur angegebenen IP-Addresse
  ''' </summary>
  ''' <param name="IP">IP-Addresse des Servers</param>
  ''' <param name="Port">Zu benutzender Port</param>
  ''' <returns>Daten-Stream der Verbinung</returns>
  ''' <remarks></remarks>
  Public Function OpenConnection(ByVal IP As String, ByVal Port As Integer) As NetworkStream
    Dim address() As Byte = {IP.Split(".")(0), IP.Split(".")(1), IP.Split(".")(2), IP.Split(".")(3)}
    Return OpenConnection(New IPAddress(address), Port)
  End Function

Zum Schluss sollte man die Verbindung wieder trennen:

  ''' <summary>
  ''' Trennt die Verbindung zum Server
  ''' </summary>
  ''' <remarks></remarks>
  Sub CloseConnection()
      Connection.Close()                         ' Verbindung schließen
      Connection = Nothing                       ' Speicher freigeben
  End Sub
End Class

Als kleinen Test kann man versuchen, eine HTTP-Verbindung zum vb@rchiv herzustellen. Dazu werden zwei kleine Hilfsfunktionen gebraucht, die zwischen String und Byte-Arrays konvertieren.

Sub Test()
  Dim Connection As New TcpIPConnection
  Dim Stream As NetworkStream
  Dim Request As String = "GET /index.html HTTP/1.0"
  Stream = Connection.OpenConnectionByServer("www.vbarchiv.net", 80)
  Stream.Write(TextToByte(Request), 0, Request.Length)
  Dim Response As String
  Dim ResponseBytes(1024) As Byte
  While Not Stream.DataAvailable
    Threading.Thread.Sleep(50)
  End While
  Stream.Read(ResponseBytes, 0, 1024)
  Response = ByteToText(ResponseBytes)
  Connection.CloseConnection()
End Sub
Function TextToByte(ByVal Text As String) As Byte()
  Dim Bytes(Text.Length - 1) As Byte
  For I As Integer = 0 To Text.Length - 1
    Bytes(I) = Asc(Text(I))
  Next 
  Return Bytes
End Function
Function ByteToText(ByVal Bytes() As Byte) As String
  Dim Text  As New StringBuilder
  For I As Integer = 0 To Bytes.Length - 1
    If Bytes(I) = 0 Then Exit For
      Text.Append(Chr(Bytes(I)))
    Next 
  Return Text.ToString
End Function



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle 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.