A
Hello tout le monde , j'ai actuellement un soucis avec mon DataReader !
J'ai repris le tutoriel : -débuter-dans-le-développement-socket-d2-(complet).162/]viewtopic.php?f=6&t=394&hilit=Datareader
Et converti tout le code en Vb.net ..
Seulement voilà j'ai un soucis lors de la compilation , lorsque je compile,
j'ai ma Form qui s'affiche 2 second à peine :
Le contenu :
Apres les 2 second, surviens cette magnifique erreur qui m'a bloqué toute l'aprem xD :
Voici le code de mon DataReader
Le code de mon form :
...Et je pense que le soucis viens de cette partie là
Merci d'avance !
J'ai repris le tutoriel : -débuter-dans-le-développement-socket-d2-(complet).162/]viewtopic.php?f=6&t=394&hilit=Datareader
Et converti tout le code en Vb.net ..
Seulement voilà j'ai un soucis lors de la compilation , lorsque je compile,
j'ai ma Form qui s'affiche 2 second à peine :
Le contenu :
Code:
La connexion au serveur d'authentification est réussie.
[Reçu] ID = 1 | Taille du contenu = 8
00 00 06 13 00 00 06 17
[Reçu] ID = 3 | Taille du contenu = 341
00 20 68 70 61 37 68 6E
70 77 4C 4C 6F 74 51 39
7D 52 2D 25 28 5F 2B 2C
22 64 74 5C 56 7B 70 5E
6A 48 01 31 A7 4A D6 D6
16 67 57 7D D7 6C 9C 3C
0B E9 9C 2F 79 09 3A F3
BA 5E A5 21 AB 9F B3 D7
B0 E7 F1 33 10 48 F9 F7
26 2C 73 43 24 2A D9 47
F4 AE 33 D2 2A 4F 0E 49
FB 3F 72 2E F5 19 29 44
AB D9 6A E1 39 3F 7C 7F
EB 8D 91 9D F2 A9 5B 70
61 39 74 A0 21 5E 94 7A
07 B4 A9 10 AA FE A9 8B
5C 11 13 50 2F 2E DD 30
D7 A2 B3 F2 D5 F7 80 71
82 7B 3F 36 6E C9 C3 1D
D6 1B DC 0D 46 3E F7 DB
AA 38 6F F6 9C 03 7F 48
87 21 67 8F 05 47 A5 49
85 87 0B 7C B4 E0 EF 40
14 43 CC 6A 99 1E B1 3D
B6 DE D5 6F E9 48 6E F2
77 CF 2C 59 38 4C F2 02
95 4B DF 44 FE 18 79 04
DD A1 AA 9F 06 F4 A0 6A
CC 81 45 A3 49 E3 A3 A3
2D DD 04 15 D9 9F CD 45
B9 41 17 F0 DF 38 B4 4C
A8 99 95 B0 80 B4 73 5D
2C 2B 03 F0 FD C8 9B 57
EF 46 41 4F 92 EB C4 33
E6 A5 BA FB 29 AA F0 0C
F0 43 F8 0B 70 65 D2 AE
E5 CA 35 03 F2 7C 09 BF
F0 0A B4 71 C1 D6 95 72
03 1A 5E C2 99 B8 A8 A6
CF 68 32 13 73 2B D9 C8
56 A8 FA FE B4 05 F6 EF
51 A0 91 34 EF E0 53 EE
87 C0 30 9F 15
Apres les 2 second, surviens cette magnifique erreur qui m'a bloqué toute l'aprem xD :
Voici le code de mon DataReader
Code:
Imports System.Text
Public Class DataReader
#Region "Attributs"
Private _Content As Byte()
Private _Position As Integer = 0
#End Region
#Region "Propriétés"
''' <summary>
''' Obtient ou défini le tableau d'octets en lecture.
''' </summary>
Public Property Content() As Byte()
Get
Return Me._Content
End Get
Set(ByVal value As Byte())
Me._Content = value
End Set
End Property
''' <summary>
''' Obtient ou défini la position du curseur de lecture.
''' </summary>
Public Property Position() As Integer
Get
Return Me._Position
End Get
Set(ByVal value As Integer)
Me._Position = value
End Set
End Property
#End Region
#Region "Constructeurs"
''' <summary>
''' Initialise une nouvelle instance de la classe D2Com.IO.DataReader.
''' </summary>
Public Sub New()
End Sub
''' <summary>
''' Initialise une nouvelle instance de la classe D2Com.IO.DataReader.
''' </summary>
''' <param name="content">Tableau d'octets à lire.</param>
Public Sub New(ByVal content As Byte())
Me._Content = content
End Sub
#End Region
#Region "Méthodes publiques"
''' <summary>
''' Lit le prochain octet.
''' </summary>
''' <returns>L'octet.</returns>
Public Function ReadByte() As Byte
If Me._Content.Length >= 1 Then
Dim result As Byte
result = Me._Content(_Position)
Me._Position += 1
Return result
Else
Throw New Exception("Il n'y a plus d'octet à lire.")
End If
End Function
''' <summary>
''' Lit le nombre spécifié des prochains octets.
''' </summary>
''' <param name="number">Nombre d'octets à lire.</param>
''' <returns>Le tableau d'octets lus.</returns>
Public Function ReadBytes(ByVal number As Integer) As Byte()
If Me._Content.Length >= number Then
Dim result As Byte() = New Byte(number - 1) {}
Dim i As Integer = 0
While i <> number
result(i) = Me.ReadByte()
i += 1
End While
Return result
Else
Throw New Exception("Il n'y a plus d'octets à lire.")
End If
End Function
''' <summary>
''' Lit les prochains octets de la longueur d'un short.
''' </summary>
''' <returns></returns>
Public Function ReadShort() As Short
If Me._Content.Length >= 2 Then
Return CShort((Me.ReadByte() << 8) + Me.ReadByte())
Else
Throw New Exception("Il n'y a plus d'octets à lire.")
End If
End Function
''' <summary>
''' Lit les prochains octets de la longueur d'un int codé en 16 bits.
''' </summary>
''' <returns>Contenu de l'int.</returns>
Public Function ReadIntOn16Bits() As Integer
If _Content.Length >= 2 Then
Dim i As Integer = CInt((Convert.ToUInt16(ReadByte()) << 8) + Convert.ToUInt16(ReadByte()))
Return i
Else
Throw New Exception("Il n'y a plus d'octets à lire.")
End If
End Function
''' <summary>
''' Lit les prochains octets de la longueur d'un int.
''' </summary>
''' <returns>Contenu de l'int.</returns>
Public Function ReadInt() As Integer
If _Content.Length >= 4 Then
Return CInt((ReadByte() << 24) + (ReadByte() << 16) + (ReadByte() << 8) + ReadByte())
Else
Throw New Exception("Il n'y a plus d'octets à lire.")
End If
End Function
''' <summary>
''' Lit les prochains octets codés en UTF8.
''' </summary>
''' <returns>Contenu de la châine.</returns>
Public Function ReadString() As String
Dim string_bytes As Byte() = ReadBytes(ReadIntOn16Bits())
Return Encoding.UTF8.GetString(string_bytes)
End Function
''' <summary>
''' Lit le prochain octet de la valeur d'un byte en le convertissant en bool
''' </summary>
''' <returns>Contenu du bool.</returns>
Public Function ReadBool() As Boolean
If ReadByte() = 1 Then
Return True
Else
Return False
End If
End Function
#End Region
End Class
Le code de mon form :
Code:
Imports System.Net.Sockets
Imports System.Threading
Imports System.Net
Public Class Form1
Private _Socket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Public Function MD5(ByVal [String] As String) As String
Dim cryptor As New System.Security.Cryptography.MD5CryptoServiceProvider()
Dim hash_bytes As Byte() = System.Text.Encoding.UTF8.GetBytes([String])
hash_bytes = cryptor.ComputeHash(hash_bytes)
Dim buffer As String = ""
For Each by As Byte In hash_bytes
buffer += by.ToString("x2")
Next
Return buffer
End Function
Private Sub Reception()
' On reçoit les données tant qu'on est connecté.
While _Socket.Connected
' On crée notre buffer dynamique.
Dim _buffer As Byte() = New Byte(_Socket.Available - 1) {}
' Si le buffer n'est pas vide, on le parse.
If _buffer.Length <> 0 Then
_Socket.Receive(_buffer)
' Récéption des données.
' Parsing des données.
ParseData(_buffer)
End If
End While
End Sub
Private Sub ParseData(ByVal DataToParse As Byte())
' Déclaration des variables qui seront utilisées
Dim index As Integer = 0
Dim id_and_packet_lenght_type As Short, packet_id As Short, packet_lenght_type As Short
Dim packet_lenght As Int32 = 0
Dim packet_content As Byte()
' Lecture jusqu'à la fin de byte[] data
While index <> DataToParse.Length
' Décodage du header
id_and_packet_lenght_type = CShort(DataToParse(index) * 256 + DataToParse(index + 1))
' Selection des 2 premiers octets du paquet
packet_id = CShort(id_and_packet_lenght_type >> 2)
' Récupérer l'ID du paquet
packet_lenght_type = CShort(id_and_packet_lenght_type And 3)
' Récupérer la taille de la taille de la longueur du paquet
index += 2
' On se déplace 2 octets plus loin
' Récupération de la taille du paquet
Select Case packet_lenght_type
Case 0
packet_lenght = 0
Exit Select
Case 1
packet_lenght = DataToParse(index)
Exit Select
Case 2
packet_lenght = DataToParse(index) * 256 + DataToParse(index + 1)
Exit Select
Case 3
packet_lenght = DataToParse(index) * 65536 + DataToParse(index + 1) * 256 + DataToParse(index + 2)
Exit Select
End Select
' Récupération du contenu du paquet
packet_content = New Byte(CInt(packet_lenght) - 1) {}
Array.Copy(DataToParse, index + packet_lenght_type, packet_content, 0, packet_lenght)
' Création de la variable contenant le contenu du paquet en héxadécimal
Dim content_hex As String = String.Empty
Dim huit_bytes As Integer = 0
For Each b As Byte In packet_content
If huit_bytes = 8 Then
content_hex += vbCr & vbLf
huit_bytes = 0
End If
content_hex += b.ToString("X2") & " "
huit_bytes += 1
Next
' Jounalisation
Log("[Reçu] ID = " & packet_id & " | Taille du contenu = " & packet_lenght & vbCr & vbLf & content_hex)
' Traitement du paquet
TreatPacket(packet_id, packet_content)
' Définition de l'index qui démarre le paquet suivant
index += packet_lenght + packet_lenght_type
End While
End Sub
Private Sub TreatPacket(ByVal PacketID As Integer, ByVal PacketContent As Byte())
Dim reader As New DataReader(PacketContent)
Select Case PacketID
Case 1
Dim required As Integer = reader.ReadInt()
Dim currrent As Integer = reader.ReadInt()
Log("Required = " & required & " - Current = " & currrent & vbCr & vbLf)
Case 3
Dim connectionType As Integer = reader.ReadByte()
Dim key As String = reader.ReadString()
Log("ConnectionType = " & connectionType & " - Key = " & key & vbCr & vbLf)
End Select
End Sub
Private Sub Log(ByVal Text As String)
Dim log_callback As Action = DirectCast(Sub()
LogTextBox.Text += Text & vbCr & vbLf
' Ajout du texte avec un saut à la ligne en fin.
LogTextBox.[Select](LogTextBox.Text.Length, 0)
' On place le curseur à la fin de la zone de texte.
' On descend la barre de défilement jusqu'au curseur.
LogTextBox.ScrollToCaret()
End Sub, Action)
Me.Invoke(log_callback)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
_Socket.Connect("213.248.126.39", 5555)
' Connexion au serveur d'authentification.
' On test l'état de la connexion.
If _Socket.Connected Then
Log("La connexion au serveur d'authentification est réussie.")
Dim _ReceptionThread = New Thread(New ThreadStart(AddressOf Reception))
_ReceptionThread.Start()
Else
Log("La connexion au serveur d'authentification a échouée.")
End If
Catch sock_ex As SocketException
Log("[SocketException] " + sock_ex.Message)
End Try
End Sub
End Class
...Et je pense que le soucis viens de cette partie là
Code:
Private Sub TreatPacket(ByVal PacketID As Integer, ByVal PacketContent As Byte())
Dim reader As New DataReader(PacketContent)
Select Case PacketID
Case 1
Dim required As Integer = reader.ReadInt()
Dim currrent As Integer = reader.ReadInt()
Log("Required = " & required & " - Current = " & currrent & vbCr & vbLf)
Case 3
Dim connectionType As Integer = reader.ReadByte()
Dim key As String = reader.ReadString()
Log("ConnectionType = " & connectionType & " - Key = " & key & vbCr & vbLf)
End Select
End Sub
Merci d'avance !