#Region "Zusatz funktionen"
Private Function BytesToString(ByVal Bytes() As Byte) As String
Dim i As Integer, Str As String = ""
For i = 0 To UBound(Bytes)
If Not Bytes(i) = 0 Then
Str = Str & Chr(Bytes(i))
End If
Next
Return Str
End Function
Private Function StringToBytes(ByVal Strings As String) As Byte()
Dim i As Integer, Byt() As Byte = Nothing
ReDim Byt(Len(Strings) - 1)
For i = 0 To Len(Strings) - 1
Byt(i) = Asc(Mid(Strings, i + 1, 1))
Next
Return Byt
End Function
Private Function StringToSize(ByVal str As String, Optional ByVal SynchSafe _
As Boolean = True) As Double
Dim Base As Double
Base = 256 * (2 ^ CDbl(SynchSafe))
If Len(str) = 4 Then
Return CDbl(Asc(Mid(str, 4, 1))) * Base ^ CDbl(Len(str) - 4) + CDbl( _
Asc(Mid(str, 3, 1))) * Base ^ CDbl(Len(str) - 3) + CDbl(Asc(Mid( _
str, 2, 1))) * Base ^ CDbl(Len(str) - 2) + CDbl(Asc(Mid(str, 1, _
1))) * Base ^ CDbl(Len(str) - 1) - 1
ElseIf Len(str) = 3 Then
Return CDbl(Asc(Mid(str, 3, 1))) * Base ^ CDbl(Len(str) - 3) + CDbl( _
Asc(Mid(str, 2, 1))) * Base ^ CDbl(Len(str) - 2) + CDbl(Asc(Mid( _
str, 1, 1))) * Base ^ CDbl(Len(str) - 1) - 1
End If
Return ""
End Function
Private Function SizeToString(ByVal num As Double, Optional ByVal size As _
Long = 4, Optional ByVal SynchSafe As Boolean = True) As String
Dim mTmp As Double
Dim dTmp As Double
Dim sTmp As String
Dim Base As Double
dTmp = num
sTmp = ""
Base = 256 * (2 ^ CDbl(SynchSafe))
Do
mTmp = Fix(dTmp / Base)
sTmp = Chr(CLng(dTmp - Base * mTmp)) & sTmp
If mTmp = 0 Then Exit Do
dTmp = mTmp
Loop
If Len(sTmp) > size Then
SizeToString = Right(sTmp, size)
Else
SizeToString = New String(Chr(0), size - Len(sTmp)) & sTmp
End If
End Function
#End Region
#Region "Events"
''' <summary>
''' Gibt den IP-Adresse auf dem Remote Computer zurück, über den eine
' Verbindung hergestellt werden soll, oder legt den Anschluß fest.
''' </summary>
Public Property Paketgröße() As Long
Get
Return _Paketgröße
End Get
Set(ByVal Value As Long)
If Status = WinsockStates.Closed Then
_Paketgröße = Value
Else
Throw New Exception("Die Verbindung ist nicht geschlossen," & _
"daher kann dieser IP nicht gesetzt werden.")
End If
End Set
End Property
''' <summary>
''' Gibt das Socket-Protokoll zurück oder legt es fest.
''' </summary>
<RefreshProperties(RefreshProperties.All)> _
Public Property Protokoll() As WinsockProtocol
Get
Return _Protokoll
End Get
Set(ByVal value As WinsockProtocol)
If Status <> WinsockStates.Closed Then
Throw New Exception("Cannot change the protocol while listening" & _
"or connected to a remote computer.")
End If
_Protokoll = value
End Set
End Property
''' <summary>
''' Bindet den Socket an einen bestimmten Anschluß und eine bestimmte
' Netzwerkkarte.
''' </summary>
''' <param name="Port">Gibt den Anschluß auf dem Remote Computer zurück,
' über den eine Verbindung hergestellt werden soll, oder legt den Anschluß
' fest.</param>
''' <param name="IP">Gibt den Anschluß zurück, der auf dem lokalen
' Computer verwendet wird, oder legt den Anschluß fest.</param>
Public Sub Bind(ByVal Port As Integer, IP As String)
_LocalIP = IP
_LocalPort = Port
Connect()
End Sub
''' <summary>
''' Gibt die Anzahl der über diese Verbindung empfangenen Bytes zurück.
''' </summary>
Public Function BytesReceived() As Long
Return _BytesReceived
End Function
''' <summary>
'''Speichert alle zusätzlichen Daten, die Sie für Ihr Programm benötigen.
''' </summary>
Public Property Tag() As String
Get
Return _Tag
End Get
Set(ByVal Value As String)
If Status <> WinsockStates.Connected Then
_Tag = Value
Else
Throw New Exception("Can't be connected to a server and change" & _
"the remote port.")
End If
End Set
End Property
Beitrag wurde zuletzt am 15.06.17 um 13:13:34 editiert. |