C# Le fonctionnement d'un Bot.

Inscrit
31 Mars 2012
Messages
102
Reactions
0
#21
C'est normal que tu ne reçoive pas les packets suivants, tu ne boucle pas ta reception donc tu t'arrête au premier packet lut :)
 
Inscrit
26 Février 2016
Messages
82
Reactions
0
#22
nico1705 a dit:
C'est normal que tu ne reçoive pas les packets suivants, tu ne boucle pas ta reception donc tu t'arrête au premier packet lut :)
Oui mais niveau code je vois pas comment faut faire, je sais faire une boucle, mais pour tout le système pour recevoir je sais pas trop :/

Voici ce que j'ai essayé de faire :

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Threading;

namespace ClubPenguin
{
    class Program
    {

        public static Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        static void Main(string[] args)
        {

            try
            {
                socket.Connect("204.75.167.165", 3724);

                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.Write(" [Connexion]");
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.Write(" Connexion au serveur d'authentification... ");

                if (socket.Connected)
                {
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("Ok!");
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.Write("\n [Client]");
                    Console.ForegroundColor = ConsoleColor.Gray;
                    Console.WriteLine(" Vérification de la version avec celle du serveur... ");

                    // -- Packets --
                    byte[] policy = new byte[] { 0x3c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2d, 0x66, 0x69, 0x6c, 0x65, 0x2d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2f, 0x3e, 0x00 };
                    byte[] version = new byte[] { 0x3c, 0x6d, 0x73, 0x67, 0x74, 0x3d, 0x27, 0x73, 0x79, 0x73, 0x27, 0x3e, 0x3c, 0x62, 0x6f, 0x64, 0x79, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3d, 0x27, 0x76, 0x65, 0x72, 0x43, 0x68, 0x6b, 0x27, 0x72, 0x3d, 0x27, 0x30, 0x27, 0x3e, 0x3c, 0x76, 0x65, 0x72, 0x76, 0x3d, 0x27, 0x31, 0x35, 0x33, 0x27, 0x2f, 0x3e, 0x3c, 0x2f, 0x62, 0x6f, 0x64, 0x79, 0x3e, 0x3c, 0x2f, 0x6d, 0x73, 0x67, 0x3e, 0x00 };

                    // On décode en Ascii pour voir le contenu du packet à l'écran
                    String policy_ascii = System.Text.Encoding.ASCII.GetString(policy);

                    send(policy); // Méthode qui envoie le packet

                    // Affiche à l'écran le packet décodé qui a été envoyé
                    Console.ForegroundColor = ConsoleColor.Magenta;
                    Console.Write("\n [Packets]");
                    Console.ForegroundColor = ConsoleColor.Gray;
                    Console.Write(" Packet envoyé : ");
                    Console.WriteLine(policy_ascii);
                    

                    String version_ascii = System.Text.Encoding.ASCII.GetString(version); // On décode en Ascii pour voir le contenu du packet à l'écran

                    send(version); // Méthode qui envoie le packet

                    rcv(); // Méthode qui récupère en boucle les packets

                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Write("Echec!");
                    Console.ForegroundColor = ConsoleColor.Gray;
                }
            }

            catch (SocketException sock_ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("[SocketException] " + sock_ex.Message);
                Console.ForegroundColor = ConsoleColor.Gray;

            }


        }


        public static void send(byte[] packet)
        {
            socket.Send(packet);
        }


        public static void rcv()
        {
            while (socket.Connected)
            {
                byte[] recvBuffer = new byte[3024];
                int bytesReceived = socket.Receive(recvBuffer);
                if (bytesReceived > 0)
                {
                    byte[] data = new byte[bytesReceived];
                    Array.Copy(recvBuffer, 0, data, 0, bytesReceived);
                    Console.ForegroundColor = ConsoleColor.Magenta;
                    Console.Write("\n [Packets]");
                    Console.ForegroundColor = ConsoleColor.Gray;
                    Console.Write(" Packet reçu : ");
                    String data_decode = System.Text.Encoding.ASCII.GetString(data);
                    Console.WriteLine(data_decode);
                }
            }
        }
    }

}
 
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#23
tu dois faire une boucle infinie true et faire un thread.
 
Inscrit
10 Mai 2015
Messages
357
Reactions
55
#25
Oui autant pour moi j'avais pas regardé au code.
 
Inscrit
26 Février 2016
Messages
82
Reactions
0
#26
Du coup il y a quoi qui ne va pas ?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#28
essai en mettant ca : public static void rcv() , dans un thread , et en lancant le thread avant le 1er envoie
 
Inscrit
27 Juin 2012
Messages
238
Reactions
0
#29
Moi ce qui me choque, c'est le nom de ton namespace, voilà voila :D
 
Inscrit
27 Juin 2012
Messages
238
Reactions
0
#31
Il m'aura bien fait rigoler alors :D
 
Inscrit
26 Février 2016
Messages
82
Reactions
0
#32
Salut, oui effectivement je débute dans l'univers des Bot etc... Je connaissais ce jeu étant jeune et j'ai trouvé le protocol du jeu assez simple et tout ce qui s’ensuit, alors pourquoi ne pas commencer par là ? ^^
 
Inscrit
26 Février 2016
Messages
82
Reactions
0
#33
NicoMasterChief a dit:
Tu envoies probablement quelque chose d'erroné.
ToOnS a dit:
essai en mettant ca : public static void rcv() , dans un thread , et en lancant le thread avant le 1er envoie
Nico, j'ai vu que mon packet que j'envoyer étant moins gros que l'original, mais lorsque je l'ai envoyé en entier, c'était encore la même chose, du coup je vais réessayer pour voir si je n'ai rien oublié. :)

ToOnS, D'accord je vais essayer :D

Merci à vous deux :)
 
Inscrit
26 Février 2016
Messages
82
Reactions
0
#34
J'ai enfin réussi à recevoir le packet envoyé au client qui informe si la version que l'on utilise du client est correcte ou pas ! :p



Merci à vous ! :) :o
 
Inscrit
26 Février 2016
Messages
82
Reactions
0
#35
Dernière petite question (Et oui :p), le serveur génère une clé aléatoire qui m'envoie, mais le problème c'est que je ne vois pas
comment je vais faire pour stocker uniquement la clé random qui est au pleins milieu du packet car par la suite je vais avoir besoin de cette clé pour hash mon mot de passe.

 
Inscrit
15 Avril 2011
Messages
457
Reactions
1
#36
Si c'est du XML, c'est facile à lire. Tu dois pouvoir créer un document XML à partir de ce que tu reçois.
 
Inscrit
26 Février 2016
Messages
82
Reactions
0
#37
Salut, effectivement je n'avais pas bien réfléchit à cela, le problème c'est que j'ai une méthode avec une boucle qui récupère tous les packets que je reçois, cependant, lorsque j'essaie de sauvegarder mon premier packet dans le fichier, tout se passe bien mais lors de la deuxième écrit du deuxième packet, il y a des erreurs.. Je pense que à chaque fois le fichier est vidé ou que lorsque le packet est inscrit dans le fichier, tout est supprimer. Je voudrais trouver une solution ou un peu de logique. Merci :)
 
Inscrit
15 Avril 2011
Messages
457
Reactions
1
#38
Non mais tu vas pas écrire dans un fichier à chaque fois que tu reçois un paquet. Quand je te parlais de document XML, je te parlais d'un document virtuel, c'est-à-dire un objet C#.
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#39
Tu as juste à parser le xml que tu reçois (il doit exister plein de parsers en C#) et à stocker la valeur de la clef dans une variable.
Je t'invite à lire quelques tutoriels de programmation pour mieux maîtriser cela :D
 
Haut Bas