Classe de pour faciliter l'utilisation des sockets tcp en mode asynchrone.
Je dois maintenant trouver le moyen de régler le problème des opérations inter-threads non valides. J'ai lu quelques sources sur des fonctions delegates, mais j'ai pas compris leur fonctionnement. Si vous en avez compris le fonctionnement, merci de m'aider ici ou par message privé ;)
Source / Exemple :
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
22 oct. 2008 à 20:50
Quelque chose qui me prouve par exemple que je suis bien connecté :)
19 oct. 2008 à 18:53
19 oct. 2008 à 18:51
5 oct. 2008 à 13:46
5 oct. 2008 à 13:33
Une requête d'envoi ou de réception de données n'a pas été autorisée car le socket n'est pas connecté et (lors de l'envoi sur un socket datagramme en utilisant un appel sendto) aucune adresse n'a été fournie.
SocketError : NotConnected
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.