C# Envoie de packets

A

Anonymous

Invité
#1
Salut à tous =)

Voilà, j'ai commencer un bot en C# voilà quelques jours, et je suis rendu à l'envoi du packet 3. Tout me semble correct, j'envoie le tout, mais lorsque j'attend mon prochain packet, je reçois quelques packets de files d'attente et je me rend compte que la valeur de retour de receive, soit la taille du packet est de 0, ce qui veux tout simplement dire que je ne reçois plus rien x) Avez vous une idée de où ça pourrait venir ?

Merci =)
 
A

Anonymous

Invité
#2
Une bout de code ? Des logs ?
Je ne suis pas medium ;)
 
A

Anonymous

Invité
#3
Je pensais que c'était un problème récurant ^^

Donc ma boucle de reception ->
Code:
public void Reception()
        {
            BufferRead Packet;
            int separator = 0;
            while (sock.Connected)
            {
                buffer = new Byte[8192];
                len = sock.Receive(buffer);
                if (len == 0)
                {
                    ToWrite.WriteLog("Erreur lors de la communication.");
                    return;
                }
                do
                {
                    Packet = new BufferRead(buffer, len, sock);
                    GestionPackets.GestionConnection(Packet, ToWrite);
                    separator += 2 + Packet.TailleDeTaille + Packet.Taille;
                    if (separator < len)
                        buffer = newBuff(separator);
                } while (separator < len);
            }
        }

Ma fonction de gestion ->
Code:
public static int GestionConnection(BufferRead Packet, Writter ToWrite)
        {
            switch (Packet.Id)
            {
                case (1):
                    ToWrite.WriteLog("Connected.");
                    break;
                case (3):
                    ToWrite.WriteLog("Hello connect message.\nEnvoie du packet 3.");
                    GPackets.packet3(Packet, ToWrite.Pseudo, ToWrite.Mdp);
                    break;  
                case (0):
                    ToWrite.WriteLog("Failed.");
                    break;
                case (10):
                    GPackets.packet10(Packet);
                    break;
                case (6314):
                    ToWrite.WriteLog("Credentials Acknowledgement Message.");
                    GPackets.packet40(Packet);
                    break;
                case (6119):
                    ToWrite.WriteLog("Identification Account Force Message.");
                    break;
                case (20):
                    ToWrite.WriteLog("Identification Failed Message.");
                    break;
                case (21):
                    ToWrite.WriteLog("Identification Failed For Bad Version Message.");
                    break;
                case (22):
                    ToWrite.WriteLog("Identification Success Message.");
                    break;

                default:
                    ToWrite.WriteLog("Packet inconnu au bataillon : " + Packet.Id + ".");
                    break;
            }
            return (0);
        }

Ma fonction packet3 ->
Code:
public static int packet3(BufferRead Packet, string pseudo, string mdp)
        {

            List<int> credentials;
            RsaCRYPTER forCrypt;
            BufferSend Send = new BufferSend();
            Byte[] version = new Byte[10] { 0x00, 0x02, 0x07, 0x00, 0xED, 0x7F, 0x02, 0x00, 0x01, 0x01 };
            string salt = Packet.ReadString();
            Byte[] key = Packet.ReadBytes(Packet.ReadIntOn16Bits());
            for (int i = 0; i < 10; i++)
                Send.WriteByte(version[i]);
            Send.WriteString("fr");
            Send.WriteString(pseudo);
            Packet.ReadIntOn16Bits();
            forCrypt = new RsaCRYPTER(salt + mdp, Packet);
            credentials = forCrypt.Encrypt(key);
            Send.WriteShort(credentials.Count);
            foreach (Byte n in credentials)
                Send.WriteByte((Byte)n);
            Send.WriteByte(0);
            Send.WriteByte(0);
            Packet.Dofus.Send(Send.ToSend(4));
            return (0);
        }

La classe mon packet avant l'envoi semble correct, ce qui est bizarre, c'est que je n'ai pas de retour :x
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#4
Salut , c'est quoi les derniers paquets recus (y compris les "Packet inconnu au bataillon : " + Packet.Id + "." ) , ou mieu le log ?
(heu en theorie case 0 devrait pas exister , si tu as un Packet.Id=0 alors le parser est moisi donc en effet ca fait un gros ToWrite.WriteLog("Failed.");)
 
A

Anonymous

Invité
#5
Le packet 0 était un test que j'avais mis juste avant de verifier la taille de du packet, en gros, "Failled = Erreur lors de la connection".

Et "Packet inconnu au bataillon : " c'est pour me dire -> Ce packet est pas dans la gestion go voir a quoi correspond le packet n°...
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#7
donne le log (c'est la 3ieme fois qu'on te le demande)
 
A

Anonymous

Invité
#8
Le dernier packet reçu est le 3, je réenvoi, et je ne reçois plus rien, comme si j'étais déco :/

PS : le packet que j'envoie semble parfait :/ bon header et tout ^^'
 
A

Anonymous

Invité
#9
Edit: non rien j'ai mal lut :p
 
Haut Bas