L'OCX Winsock est la librairie internet de Windows pour communiquer sur le réseau...
Donc il est hyper performant, par contre il a un comportement bizarre... En effet quand tu envoie une donnée, il la met dans une file d'attente et du coup parfois tu envoie un gros paquet de données d'un coup, ce qui fait tout sauter ton parseur en face.
Par contre, il est hyper simple d'utilisation...
Je te file l'aide de MSDN library demain.
Pour l'instant, juste un petit bout de code :
Serveur :
Tu fait ajouter un contrôle OCX et tu balance Winsock dans ton Form. Dans ces proproiétés, tu le modifies de façon à ce que ce soit un tableau d'objet (permet plusieurs clients connectés en même temps)
' Création de la connection
Private Continuer As Boolean
Private intMax As Long
Private Sub Form_Load()
ss Continuer = False
ss intMax = 0
ss ' Ouverture du port 1001
ss tcpServer(0).LocalPort = 1001
ss ' Ecoute du port
ss tcpServer(0).Listen
End Sub
' Un client essaye de se connecter
Private Sub tcpServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
ss intMax = intMax + 1
ss tcpServer(intMax).LocalPort = 0
ss tcpServer(intMax).Accept requestID
End Sub
' Réception de données depuis le client 'Index'
Private Sub tcpServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
ssssDim strData As String
sssstcpServer(Index).GetData strData
ssssfor i = 0 to ubound(tcpServer)
ssssssssif i <> index then
ssssssssssss' On envoie la donnée à tout les clients sauf l'émetteur
ssssssssssssres = sendData(i, strData)
ssssssssend if
ssssnext
End Sub
Private Sub tcpServer_SendComplete(Index As Integer)
ssssContinuer = True
End Sub
Function SendData(Index, strData)
ssssSendData = 1
ssssOn Error Resume Next
ssssContinuer = False
sssstcpServer(Index).SendData strData
ssssDo While Not (Continuer Or Err <> 0)
ssssssssDoEvents
ssssLoop
ssssErr.Clear
ssssOn Error GoTo 0
End Function
Client
Mettre l'OCX Winsock dans le form, mais le laisser tel quel.
Dim Sent
Private Sub Form_Load()
sssstcpClient.RemoteHost = "NOM_DU_SERVEUR"
sssstcpClient.RemotePort = 1001
sssstcpClient.Connect
end sub
Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)
ssssDim strData As String
sssstcpClient.GetData strData
ssss' Tes données sont dans "strData" tu en fais ce que tu veux
end sub
Private Sub tcpClient_SendComplete()
ssssSent = True
End Sub
Function SendData(strData)
ssssSendData = 1
ssssOn Error Resume Next
ssssSent = False
sssstcpClient.SendData strData
ssssDo While Not Sent Or Err <> 0
ssssssssDoEvents
ssssLoop
ssssIf Err <> 0 Then
ssssssssDisplayLine "La connection avec le serveur a été perdue"
ssssssssSendData = 0
ssssEnd If
ssssErr.Clear
ssssOn Error GoTo 0
End Function
Cet exemple doit plus ou moins fonctionner.
strData est non typé. Tu peux mettre ce que tu veux dedans. Je te conseille de mettre des chaînes de caractère, avec des séparateurs d'instruction :
par exemple : "/mot_clé valeur|/mot_clé valeur/mot_clé valeur/mot_clé valeur..."
Ensuite, tu n'as qu'à faire un parseur dans GetData afin de récupérer les valeurs.