#Region " Methods "
Public Sub Listen()
Dim x As New System.Threading.Thread(AddressOf DoListen)
x.Start()
End Sub
Public Sub Close()
Try
Select Case GetState
Case WinsockStates.Listening
ChangeState(WinsockStates.Closing)
_sockList.Close()
Case WinsockStates.Connected, WinsockStates.Connecting, _
WinsockStates.ConnectionPending, WinsockStates.HostResolved, _
WinsockStates.Open, WinsockStates.ResolvingHost
ChangeState(WinsockStates.Closing)
_Client.Close()
Case WinsockStates.Closed
'do nothing
End Select
ChangeState(WinsockStates.Closed)
Catch ex As Exception
ChangeState(WinsockStates.Error)
RaiseEvent HandleError(Me, ex.Message, ex.TargetSite.Name, _
ex.ToString)
End Try
End Sub
Public Sub Accept(ByVal requestID As Socket)
Try
ChangeState(WinsockStates.ConnectionPending)
_Client = requestID
RaiseEvent Connected(Me)
ChangeState(WinsockStates.Connected)
_Client.BeginReceive(_byteBuffer, 0, 1024, SocketFlags.None, _
AddressOf DoStreamReceive, Nothing)
Catch ex As Exception
ChangeState(WinsockStates.Error)
RaiseEvent HandleError(Me, ex.Message, ex.TargetSite.Name, _
ex.ToString)
End Try
End Sub
Public Sub Connect()
If GetState = WinsockStates.Connected Or GetState = _
WinsockStates.Listening Then
RaiseEvent HandleError(Me, "Already open, must be closed first", _
"Connect", "Nothing here")
Exit Sub
End If
Try
Dim remIP As String = ""
ChangeState(WinsockStates.ResolvingHost)
Try
Dim x As System.Net.IPAddress
x = IPAddress.Parse(_RemoteIP)
remIP = x.ToString
Catch ex1 As Exception
'not a valid IP address - resolve DNS
Try
Dim ip As IPHostEntry = Dns.GetHostEntry(_RemoteIP)
Dim t() As IPAddress = ip.AddressList
remIP = t(0).ToString
Catch ex2 As Exception
ChangeState(WinsockStates.Error)
RaiseEvent HandleError(Me, ex2.Message, _
ex2.TargetSite.Name, ex2.ToString)
End Try
End Try
ChangeState(WinsockStates.HostResolved)
_Client = New Socket(AddressFamily.InterNetwork, SocketType.Stream, _
ProtocolType.Tcp)
Dim rEP As New IPEndPoint(IPAddress.Parse(remIP), RemotePort)
'_Client.Connect(rEP)
ChangeState(WinsockStates.Connecting)
_Client.BeginConnect(rEP, New AsyncCallback(AddressOf OnConnected), _
Nothing)
Catch ex As Exception
ChangeState(WinsockStates.Error)
RaiseEvent HandleError(Me, ex.Message, ex.TargetSite.Name, _
ex.ToString)
End Try
End Sub
Public Sub Connect(ByVal IP As String, ByVal Port As Integer)
RemoteIP = IP
RemotePort = Port
Connect()
End Sub
#End Region
Teil4 folgt |