Rubrik: HTML/Internet/Netzwerk · Netzwerk | VB-Versionen: VB2005, VB2008 | 18.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 Wagensommer | Bewertung: | Views: 16.004 |
ohne Homepage | System: 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