- Imports System
- Imports System.Net
- Imports System.Net.Sockets
-
- Public Class CAsyncTCPSocket
-
- #Region "Attributs"
- Private aSocket As Socket
- Private aTemporaryBuffer As Byte()
- Private aTemporaryBufferLenght As Integer
- #End Region
-
- #Region "Evènements"
- Public Event Connected()
- Public Event Disconnected()
- Public Event DataSended()
- Public Event DataArrival(ByVal Data As Byte(), ByVal Lenght As Integer)
- #End Region
-
- #Region "Constructeur"
- Sub New()
- Me.aTemporaryBufferLenght = 1024
- End Sub
- #End Region
-
- #Region "Parametrage"
- Public Property ReceiverLenght() As Integer
- Get
- Return Me.aTemporaryBufferLenght
- End Get
- Set(ByVal Lenght As Integer)
- Me.aTemporaryBufferLenght = Lenght
- End Set
- End Property
- #End Region
-
- #Region "Connexion"
- Public Sub Connect(ByVal Hostname As String, ByVal Port As Integer)
- Me.aSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
- Me.aSocket.BeginConnect(New IPEndPoint(Dns.GetHostEntry(Hostname).AddressList(0), Port), AddressOf ConnectCallback, Nothing)
- End Sub
-
- Private Sub ConnectCallback(ByVal asyncResult As IAsyncResult)
- Me.aSocket.EndConnect(asyncResult)
- Call Receive()
- RaiseEvent Connected()
- End Sub
- #End Region
-
- #Region "Déconnexion"
- Public Sub Close()
- Me.aSocket.Shutdown(SocketShutdown.Both)
- Me.aSocket.Close()
- RaiseEvent Disconnected()
- End Sub
- #End Region
-
- #Region "Réception de données"
- Private Sub Receive()
- ReDim Me.aTemporaryBuffer(Me.aTemporaryBufferLenght)
- Me.aSocket.BeginReceive(Me.aTemporaryBuffer, 0, Me.aTemporaryBuffer.Length, SocketFlags.None, AddressOf ReceiveCallback, Nothing)
- End Sub
-
- Private Sub ReceiveCallback(ByVal ar As IAsyncResult)
- Me.aSocket.EndReceive(ar)
- RaiseEvent DataArrival(Me.aTemporaryBuffer, Me.aTemporaryBuffer.Length)
- Call Receive()
- End Sub
- #End Region
-
- #Region "Envoit de données"
- Public Sub Send(ByVal Data As String)
- Dim Buffer As [Byte]() = System.Text.Encoding.ASCII.GetBytes(Data)
- Me.Send(Buffer)
- End Sub
-
- Public Sub Send(ByVal Data As Byte())
- Me.aSocket.BeginSend(Data, 0, Data.Length, SocketFlags.None, AddressOf SendCallback, Nothing)
- End Sub
-
- Private Sub SendCallback(ByVal ar As IAsyncResult)
- Me.aSocket.EndReceive(ar)
- RaiseEvent DataSended()
- End Sub
- #End Region
-
- End Class
Imports System
Imports System.Net
Imports System.Net.Sockets
Public Class CAsyncTCPSocket
#Region "Attributs"
Private aSocket As Socket
Private aTemporaryBuffer As Byte()
Private aTemporaryBufferLenght As Integer
#End Region
#Region "Evènements"
Public Event Connected()
Public Event Disconnected()
Public Event DataSended()
Public Event DataArrival(ByVal Data As Byte(), ByVal Lenght As Integer)
#End Region
#Region "Constructeur"
Sub New()
Me.aTemporaryBufferLenght = 1024
End Sub
#End Region
#Region "Parametrage"
Public Property ReceiverLenght() As Integer
Get
Return Me.aTemporaryBufferLenght
End Get
Set(ByVal Lenght As Integer)
Me.aTemporaryBufferLenght = Lenght
End Set
End Property
#End Region
#Region "Connexion"
Public Sub Connect(ByVal Hostname As String, ByVal Port As Integer)
Me.aSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Me.aSocket.BeginConnect(New IPEndPoint(Dns.GetHostEntry(Hostname).AddressList(0), Port), AddressOf ConnectCallback, Nothing)
End Sub
Private Sub ConnectCallback(ByVal asyncResult As IAsyncResult)
Me.aSocket.EndConnect(asyncResult)
Call Receive()
RaiseEvent Connected()
End Sub
#End Region
#Region "Déconnexion"
Public Sub Close()
Me.aSocket.Shutdown(SocketShutdown.Both)
Me.aSocket.Close()
RaiseEvent Disconnected()
End Sub
#End Region
#Region "Réception de données"
Private Sub Receive()
ReDim Me.aTemporaryBuffer(Me.aTemporaryBufferLenght)
Me.aSocket.BeginReceive(Me.aTemporaryBuffer, 0, Me.aTemporaryBuffer.Length, SocketFlags.None, AddressOf ReceiveCallback, Nothing)
End Sub
Private Sub ReceiveCallback(ByVal ar As IAsyncResult)
Me.aSocket.EndReceive(ar)
RaiseEvent DataArrival(Me.aTemporaryBuffer, Me.aTemporaryBuffer.Length)
Call Receive()
End Sub
#End Region
#Region "Envoit de données"
Public Sub Send(ByVal Data As String)
Dim Buffer As [Byte]() = System.Text.Encoding.ASCII.GetBytes(Data)
Me.Send(Buffer)
End Sub
Public Sub Send(ByVal Data As Byte())
Me.aSocket.BeginSend(Data, 0, Data.Length, SocketFlags.None, AddressOf SendCallback, Nothing)
End Sub
Private Sub SendCallback(ByVal ar As IAsyncResult)
Me.aSocket.EndReceive(ar)
RaiseEvent DataSended()
End Sub
#End Region
End Class