Bonjour !
Dans le cadre d'une mise en mode online d'un de mes logiciels, je me suis intéressé à l'utilisation en mode asynchrone des sockets.
Cependant, lors de la récupération des données (qui sont censée être stockées dans un stringbuilder jusqu'à lecture de la balise "<end>"), j'ai un problème assez génant.
Normalement, lorsqu'un message reçu ne contient pas "<end>", il est stocké dans le stringbuilder, et ainsi de suite jusqu'à ce qu'un message contenant "<end>" soit reçu, auquel cas le contenu du stringbuilder est affiché a l'écran dans son intégralité.
Mais voilà, malgré le code ci-dessous qui devrait théoriquement marcher, seul le premier message stocké dans le stringbuilder est affiché a l'écran au lieu de l'intégralité du contenu qu'il est censé recevoir..
Je ne sais pas si je suis très clair dans mes explications, veuillez m'en excuser .
Ci-dessou le code de la méthode asynchrone de réception de données et d'affichage. Il n'est pas commenté, mais je ne pense pas qu'il soit dur a comprendre.
Private Sub receiveCallBack(ByVal obj As IAsyncResult)
Dim handler As Socket = CType(obj.AsyncState, Socket)
Dim bytesInc As Integer = handler.EndReceive(obj)
Dim data As String = String.Empty
If bytesInc > 0 Then
data = Encoding.UTF8.GetString(buffer)
If data.IndexOf("<end>") > -1 Then
data = sb.ToString() & Mid(data, 1, data.IndexOf("<end>"))
sb.Remove(0, sb.Length)
Me.txtInc.Text = data
handler.BeginReceive(buffer, 0, bufferSize, 0, New AsyncCallback(AddressOf receiveCallBack), handler)
Else
sb.Append(data)
handler.BeginReceive(buffer, 0, bufferSize, 0, New AsyncCallback(AddressOf receiveCallBack), handler)
End If
End If
End Sub
J'espère que quelqu'un pourra me dépanner, merci d'avance.
Cordialement, Kite