VB/VB.Net L'opération arithmétique a provoqué un dépassement de ca...

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#21
Re: L'opération arithmétique a provoqué un dépassement de ca

t'embete pas avec ca , prend celui des sources overedge il a des millions d'octets d'experience (c'est a la base celui de maxou alors des octets il en vu de toutes le couleurs depuis le temps) ce BooleanByteWrapper (et il marche)
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#22
Re: L'opération arithmétique a provoqué un dépassement de ca

Ahah, toujours ces foutus opérateurs !
L'erreur est simple. En traduisant, tu utilises l'opérateur & au lieu de And.
Le & permet de concaténer (coller, il me semble) deux Strings. Remplace les par des And et ça devrait aller mieux !
 
A

Anonymous

Invité
#23
Re: L'opération arithmétique a provoqué un dépassement de ca

Les sources de over ne sont plus à jour il me semble...
Sinon j'avais pas vu qu'il avait déjà fait la fonction --" Et c'est bizarre, il utilise des & et non des OR.
bref ça ne change rien car ça plante quand même avec les lignes qui suivent. (ND : Lakh92 C'est des or que ya dans les sources de D chez moi :/ )

Je vais essayer de suivre vos conseils mais vraiment je galère là :/ Normal que D. rame avec tout le bordel que ya la dedans ^^
 
A

Anonymous

Invité
#24
Re: L'opération arithmétique a provoqué un dépassement de ca

Hum ça a l'air de ne plus planter au début, c'était des and ^^ :D Maintenant c'est ici "param1.WriteShort(Me.credentials.Count)". Je pense que c'est parce que ma fonction est un peu fail. Le count est de 256, pas normal non ?
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#25
Re: L'opération arithmétique a provoqué un dépassement de ca

256 ne devrait pas faire bug ta fonction.
Quelle est l'exception lancée ?
 
A

Anonymous

Invité
#26
Re: L'opération arithmétique a provoqué un dépassement de ca

J'ai mis int16 au lieu de short dans la class version pour la révision. Ça a enlevé déjà une exeption de dépassement. Ensuite je me suis dit pourquoi ça serait pas le même problème.

param1.WriteInt16(Me.credentials.Count) au lieu de l'autre truc et ça fonctionne :

Code:
0x00020503D382010000026672000967616574616E323232010081EA9E92F4712882C316FCF6063653268CC40EBC90A3C3904ED5F59121168022F379B096BB6E77E4E0266B37C92B71641DACB89B37AAD6CFE861E3A8996CE6B9F3C39C7874C70CB8D6D8177A155FA3D55EF2F2365B478ACB1D4E2C5C1ABACB12E00FE0B5986E3F5CDF928C7E99AD06FE90C9FF8989E3D5311905FAEB5D51BCDB42075353D6B65666D9B3D849AD4BF5DE49DF33252D4E738FE747A61B5B6EB1E7583FEC5AC69E68628638F4806819C6B457128FC3721560F420195D804232529E86A85B3B5AE46772155DA0E8442FC419A2EB54420424A388BB1AB370B041F8A3727A284CD7957C1FB378A0BE7C2BEF223ADAF5D85F599A611AA4BA8A9EF9FBB10000
parsing() Send -> 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
Mais je pense que cette erreur est plus facile à résoudre. Sinon je comprends pas : on m'a dit de suivre ce qu'il y avait dans les sources de D. et ce qui fonctionne c'est pas ça : c'était un short pas un int dans les sources de D.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#27
Re: L'opération arithmétique a provoqué un dépassement de ca

int16 et short c'est la meme chose
 
A

Anonymous

Invité
#28
Re: L'opération arithmétique a provoqué un dépassement de ca

Dans ce cas la modif. n'aurait rien fait et c'est pas le cas je crois.
 
A

Anonymous

Invité
#29
Re: L'opération arithmétique a provoqué un dépassement de ca

PS: Sérieusement ce n'est pas du tout la même chose : vas voir sur mdsn.
Edit : J'avais pas vu que t'avais écrit Int16 sry je retire xD mais faut préciser que c'est un unsignde donc c'est UInt16 qui est égal a short il me semble et non int16
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#30
Re: L'opération arithmétique a provoqué un dépassement de ca

et pourtant ... http://msdn.microsoft.com/fr-fr/library/47zceaw7(v=VS.100).aspx c'est bien la meme chose , la difference est juste dans le writer overedge , writeshort ne fonctionne pas et writeint16 fonctionne (si tu mets le code le writeint16 dans writeshort tout fonctionnera et tu pourras mieux coller avec les sources)
pour uint16 c'est un ushort
 
A

Anonymous

Invité
#31
Re: L'opération arithmétique a provoqué un dépassement de ca

Je sais plus lire, je vois plus les "U"... Faut que j'aille dormir ^^ Sinon vous pensez que quelque chose utilise le socket pour :
Code:
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
C'est la première fois que ça me le fait et pourtant on en voit tout les jours.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#32
Re: L'opération arithmétique a provoqué un dépassement de ca

ca c'est parceque tu es deconnecté (je ne sais pas pourquoi surement a cause d'un mauvais envoie et le serveur te deco)
 
A

Anonymous

Invité
#33
Re: L'opération arithmétique a provoqué un dépassement de ca

Mais c'est le premier truc que j’envoie IdentificationMessage Oo. Il me deco juste après l'envoi alors ?
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#34
Re: L'opération arithmétique a provoqué un dépassement de ca

gaetan13 a dit:
Mais c'est le premier truc que j’envoie IdentificationMessage Oo. Il me deco juste après l'envoi alors ?
Ajoutes quelques outputs de debug pour savoir ça.
Il faut que tu puisses trouver tes réponses seuls, parce qu'on peut très difficilement t'aider...
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#35
Re: L'opération arithmétique a provoqué un dépassement de ca

juste avant ;) et sans le code on a du mal a voire ou ca va pas mdr
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#36
Re: L'opération arithmétique a provoqué un dépassement de ca

ToOnS a dit:
juste avant ;) et sans le code on a du mal a voire ou ca va pas mdr
C'est impossible mon bon monsieur !
 
A

Anonymous

Invité
#37
Re: L'opération arithmétique a provoqué un dépassement de ca

Code:
 Public Sub Threat(ByVal PacketID As Integer, ByVal PacketData As DofusReader)
        Dim ID_Message As Object = Nothing

        Select Case PacketID
            Case 1
                'MsgBox("gg")
            Case 3
                ID_Message = New HelloConnectMessage
                ID_Message.Deserialize(PacketData)

                Dim key = ID_Message.key
                Dim salt = ID_Message.salt

                Dim Account As String = "****"
                Dim Password As String = "*****"

                Dim CryptedPassword As List(Of Integer)

                Dim RSA As New RSAManager

                RSA.setPublicKey(key)
                RSA.setSalt(salt)

                CryptedPassword = RSA.cipherRsa(Password)

                Dim version_ As New Version
                version_.initVersion(2, 5, 3, 54146, 1, 0)

                Dim Message As New IdentificationMessage
                Message.initIdentificationMessage(version_, "fr", Account, CryptedPassword, 0, True, True, False)
                Message.pack()

            Case 20
                MessageBox.Show("Authentification ratée !")
            Case 22

            Case 42
                ip = ID_Message.address
                socketConnexion.Dispose()

        End Select
    End Sub
Si j'étais déco après je comprendrais mais la.

Voici les autres Fonctions principales.

Code:
    Dim ip As String

    Public socketConnexion As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) ' on prepare la socket
    Public socketJeu As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) ' on prepare la socket

    Dim Ecoute_Connexion_thread As New Thread(New ThreadStart(AddressOf Ecoute_Connexion)) ' on prepare le thread pour recevoire
    Dim Ecoute_Jeu_thread As New Thread(New ThreadStart(AddressOf Ecoute_Jeu))

    Public buffer(8192) As Byte ' on prepare le buffer
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        socketConnexion.Connect("213.248.126.180", 5555) ' on se connecte
        Ecoute_Connexion_thread.Start() ' on demarre le thread pour recevoire
        ' ici peu etre mettre une pause de 1 sec si _socket est encore connecté (faut voire)
        While Ecoute_Connexion_thread.IsAlive
            Application.DoEvents()
        End While
        socketJeu.Connect(ip, 5555) ' on se connecte au serveur de jeu
        Ecoute_Jeu_thread.Start() ' on demarre le thread pour recevoire avec le serveur de jeu
    End Sub

    Sub Ecoute_Connexion()
        While socketConnexion.Connected ' boucle infinie tant que connecté
            Dim i = socketConnexion.Receive(buffer) ' on met dans i le nombre d'octets recu
            Dim data(i - 1) As Byte ' on créé un tableau de bytes du nombre de bytes recus
            Array.Copy(buffer, data, i) ' on copie buffer dans data
            parsing(data) ' on lance le parsing
        End While
    End Sub
    Sub Ecoute_Jeu()
        While socketJeu.Connected ' boucle infinie tant que connecté
            Dim i = socketJeu.Receive(buffer) ' on met dans i le nombre d'octets recu
            Dim data(i - 1) As Byte ' on créé un tableau de bytes du nombre de bytes recus
            Array.Copy(buffer, data, i) ' on copie buffer dans data
            parsing(data) ' on lance le parsing
        End While
    End Sub

    Dim Data_Out(0) As Byte ' au cas ou le buffer est trop petit pour la reception (debut du paquet recu trop long)
    Dim Waiting As Integer ' au cas ou le buffer est trop petit pour la reception
    Public Sub parsing(ByVal data() As Byte)
        Try
            Dim index As Integer ' pour savoir ou on est
            Dim id_and_length As UShort ' les 2 premiers octets (16 bits)
            Dim packet_id As UShort ' les 14 premiers bits des 16
            Dim packet_length_of As Byte ' les 2 derniers bits des 16
            Dim packet_length As Integer ' la longueur du packet
            Dim Packet_Start As Integer
            Dim Packet_End As Integer

            If Waiting > 1 Then ' le buffer etait trop petit ?
                Dim data_temps(data.Length + Data_Out.Length - 1) As Byte ' on créé un tableau de byte temporaire
                Array.Copy(Data_Out, 0, data_temps, 0, Data_Out.Length) ' on met le debut du paquet trop long dans le tableau temporaire
                Array.Copy(data, 0, data_temps, Data_Out.Length, data.Length) ' on met la reception a la suite
                data = data_temps ' on met le tableau temporaire dans le tableau de travail
            End If

            Do Until index = data.Length ' on traite jusque la fin
                Packet_Start = index
                id_and_length = data(index) * 256 + data(index + 1) ' les 2 premiers octets
                packet_length_of = id_and_length And 3 ' on veut les 2 derniers bits donc on masque (and) avec 11 en binaire (3 en decimal)
                packet_id = id_and_length >> 2 ' on veut les 14 premiers bits donc on decale les 16 bits de 2 bits vers la droite
                index += 2 + packet_length_of  ' on avance des 2 octets de id_and_length + du nombre d'octets de la taille de taille

                Select Case packet_length_of ' on lit le bon nombre d'octet pour connaitre la taille des données
                    Case 0
                        packet_length = 0
                    Case 1
                        packet_length = data(index - 1)
                    Case 2
                        packet_length = 256 * data(index - 2) + data(index - 1)
                    Case 3
                        packet_length = 65536 * data(index - 3) + 256 * data(index - 2) + data(index - 1)
                End Select

                If index + packet_length > data.Length Then ' buffer trop petit ?
                    Waiting = packet_length + index - Packet_Start ' alors on le signale
                    ReDim Data_Out(data.Length - Packet_Start - 1) ' on redimensionne le tableau de debut du paquet trop long
                    Array.Copy(data, Packet_Start, Data_Out, 0, data.Length - Packet_Start) ' on copie le debut du paquet trop long
                    Exit Sub ' on sort
                End If

                Console.WriteLine("recu : id = " & packet_id & " taille = " & packet_length) ' on ecrit l'ID et la taille

                Dim packet(0) As Byte ' on prepare le paquet
                If packet_length > 0 Then ' si sa taille est plus grande que 0 on redimensionne
                    ReDim packet(packet_length - 1)
                    Array.Copy(data, index, packet, 0, packet_length) ' et on copie les donnée
                End If
                'DataCheck(packet_id, packet) ' on verra plus tard
                Threat(packet_id, New DofusReader(New IO.MemoryStream(packet)))
                index += packet_length ' on met l'index a jour
                Packet_End = index
                If Packet_End = data.Length Then ' si ca tombe pile poil alors le buffer etait assez grand
                    Waiting = 0 ' on reset
                    ReDim Data_Out(0) ' on reset
                End If
            Loop

        Catch e As Exception
            Console.WriteLine("parsing() " & e.TargetSite.Name & " -> " & e.Message)
        End Try
    End Sub
Merci.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#38
Re: L'opération arithmétique a provoqué un dépassement de ca

hum ... en effet je ne vois pas pourquoi tu serais deco avant d'envoyer quoique ce soit ... au moment du send (dans le writer) tu es bien sur le socket socketConnexion ?
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#39
Re: L'opération arithmétique a provoqué un dépassement de ca

Balance le code de Types.Version.Version, s'il te plaît.
 
A

Anonymous

Invité
#40
Re: L'opération arithmétique a provoqué un dépassement de ca

Code:
 Friend Shared Sub Send(ByVal PacketID As Integer)
        Dim MessageLenghtType As Integer = ComputeTypeLen(m_Bytes.Count)
        Dim Header As Short = ComputeStaticHeader(PacketID, MessageLenghtType)

        Dim BytesToWrite(2 + MessageLenghtType + m_Bytes.Count - 1) As Byte
        BytesToWrite(0) = Header >> 8
        BytesToWrite(1) = Header - 256 * BytesToWrite(0)

        Dim index As Integer

        Select Case MessageLenghtType
            Case 1
                BytesToWrite(2) = m_Bytes.Count
                index = 3
            Case 2
                BytesToWrite(2) = m_Bytes.Count >> 8
                BytesToWrite(3) = m_Bytes.Count - 256 * BytesToWrite(2)
                index = 4
            Case 3
                BytesToWrite(2) = m_Bytes.Count >> 16
                BytesToWrite(3) = m_Bytes.Count >> 8
                BytesToWrite(4) = m_Bytes.Count - 256 * BytesToWrite(3) - 256 * 256 * BytesToWrite(2)
                index = 5
        End Select
        Console.WriteLine("envoie : id = " & PacketID & ", taille = " & m_Bytes.Count) ' on ecrit l'ID et la taille
        Console.Write("0x")
        For i As Integer = index To m_Bytes.Count + index - 1
            BytesToWrite(i) = m_Bytes(i - index)
            Console.Write(BytesToWrite(i).ToString("X2"))
        Next
        Console.WriteLine()
        If Form1.socketConnexion.Connected Then
            Form1.socketConnexion.Send(BytesToWrite)
            MsgBox("Il ne va pas ici")
        Else
            Form1.socketJeu.Send(BytesToWrite)
        End If

        m_Bytes.Clear()

    End Sub
Il n'entre pas où j'ai mis le msgbox :/
 
Haut Bas