C/C++ type de packet / connection au serveur dofus

Inscrit
5 Juillet 2013
Messages
39
Reactions
0
#1
Bonjour,
Je suis actuellement en train de coder un bot Dofus.

Je voudrais savoir sous quelle forme on réceptionne les paquets ?
Car j'essaie de les réceptionner et de les stocker dans un tableau dynamique de type char mais quand j'essaie d'afficher le contenu ça n'affiche rien .
 
Inscrit
15 Avril 2011
Messages
457
Reactions
1
#2
Re: type de packet / connection au serveur D.

Montre ton code.
 
Inscrit
5 Juillet 2013
Messages
39
Reactions
0
#3
Re: type de packet / connection au serveur D.

Alors J'imagine que ça n'affiche rien car je reçois surement des données de type HEXA/octet alors que j'essaie d'afficher une chaine de caractères ? Il faut surement que je lise écrive en HEXA/octets. Si c'est le cas pouvez vous m'indiquer quelle bibliothèque utiliser ? (j'ai trouver MiscUtil pour C# mais je n'ai rien trouvé pour le C++).

voici le code :
Code:
#include <winsock2.h>
#include <QWidget>
#include <QMessageBox>
#include <vector>
#include <iostream>

typedef int socklen_t;

#define PORT 5555
#define ADRESSE_IP "213.248.126.39"

using namespace std;

bool getData(QWidget &parent)
{
    WSADATA wsa;
    int erreur = WSAStartup(MAKEWORD(2, 2), &wsa);

    // Socket
    SOCKET sock;
    SOCKADDR_IN sin;
    socklen_t sin_size = sizeof(sin);

    int sock_err;
    vector<char> getChar(5000);

    if(!erreur)
    {
        sock = socket(AF_INET, SOCK_STREAM, 0);

        if(sock != INVALID_SOCKET)
        {
            sin.sin_addr.s_addr = inet_addr(ADRESSE_IP);
            sin.sin_family = AF_INET;
            sin.sin_port = htons(PORT);

            if(connect(sock, (SOCKADDR*)&sin, sin_size) != SOCKET_ERROR)
            {
                int ok = recv(sock, getChar.data(), getChar.size(), 0);
                if(ok != SOCKET_ERROR)
                {
                    getChar.resize(ok);
                    QMessageBox::information(&parent, "valeur du paquet", getChar.data());
                }
            }
            else
                QMessageBox::warning(&parent, "Réseau", "Impossible de se connecter, getData::reseau");
        }
        else
            QMessageBox::warning(&parent, "Réseau", "Impossible d'initialiser la socket, getData::reseau");
    }
    else
        QMessageBox::warning(&parent, "Réseau", "Impossible d'initialiser la bibliotheque WINSOCK, getData::reseau");

    // Fermer les sockets
    closesocket(sock);
    WSACleanup();

    return true;
}

Quelques information sur le code :
-J'utilise Qt pour créer une interface graphique et la fonction QMessageBox sert a afficher une boite de dialogue usuelle a l'écran.
-Je créer une connexion utilisant le protocole TCP
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#4
Re: type de packet / connection au serveur D.

À l'exécution, la message box "valeur du paquet" est bien affichée ? Quel est son contenu ?
 
Inscrit
5 Juillet 2013
Messages
39
Reactions
0
#5
Re: type de packet / connection au serveur D.

En général, aucun contenu . Sinon il y a bien deux ou trois signes bizarres. Mais je n'ai que essayé de réceptionner le premier paquet envoyé par le serveur, un paquet de 11 caractères (j'ai affiché la valeur).
 
Inscrit
15 Avril 2011
Messages
457
Reactions
1
#6
Re: type de packet / connection au serveur D.

Les deux ou trois signes bizarres sont des octets affichés en ASCII, look ici. De plus, tu ne reçois pas le second paquet car il n'y a pas de boucle dans ton code.
 
Inscrit
5 Juillet 2013
Messages
39
Reactions
0
#7
Re: type de packet / connection au serveur D.

Donc c'est bien ce que je pensais, il faut bien que je trouve une bibliothèque pour transformer le contenu en char, int etc..

1) Quelqu'un pourrais-t'il m'indiquer une bibliothèque qui fais cela en C++ ?? (Comme je l'ai dit plus haut je connais "MiscUtil" mais c'est une bibliothèque pour le C#, donc incompatible avec le C++ et C)

2) Je sais que "MiscUtil" gérais aussi le fais que le protocole D2 utilise un grand endian, y a-t'il une bibliothèque pour ça aussi ?


PS : Je n'ai pas fait de boucle car je voulais d'abord savoir indiquer la valeur du premier paquet avant de penser comment je ferais pour réceptionner les autres. ( Je pense que je me suis mal exprimé dans mon dernier message, donc merci quand même pour la réponse )
 
A

Anonymous

Invité
#8
Re: type de packet / connection au serveur D.

La réponse à tes deux questions : code le toi même.

Si tu ne maitrises pas bien les concepts de réseau et de lecture big endian, ne fait pas un bot, et encore moins en C++.
Il y a des topics sur ce forum qui te donneront toutes les pistes pour y arriver de toutes façon.
 
A

Anonymous

Invité
#9
Inscrit
5 Juillet 2013
Messages
13
Reactions
1
#10
Re: type de packet / connection au serveur D.

Munrek, pas besoin d'être désagréable quand on pose une question et de répondre du vent (pour la 1ère réponse), de plus dans ton deuxième post, tu nous donne le sdz : socket, or, dans son code on peut voir qu'il maîtrise les sockets puisqu'il reçoit le premier paquet et il ne voulais que celui-la (donc voila pourquoi il n'y a pas de boucle).

Pour en revenir à ton problème moufett,tu n'as pas besoin de bibliothèque pour créer ton reader/writer, tu peux directement travailler sur les données reçues.

utilise ça pour mieux comprendre :
Code:
class BinaryWriter
{
private:
    int position;

public:
    char* buffer;
    BinaryWriter(int);
    void WriteShort(short);
    void WriteByte(char);
    void WriteBytes(char*, int);
};


class BinaryReader
{
private:
    int position;

public:
    char* buffer;
    BinaryReader();
    BinaryReader(char *);
    short int ReadShort();
    unsigned short int ReadUShort();
    char ReadByte();
    char* ReadBytes(int);
};
Si tu veux plus d'info moufett, mp moi.
 
Inscrit
5 Juillet 2013
Messages
39
Reactions
0
#11
Re: type de packet / connection au serveur D.

Merci beaucoup,
tes informations m'ont étés très utiles.
Grâce a toi j'ai réussi a créer une classe Writer et j'espère terminer le reader pour demain.
Je pense que ce topic est résolu.
 
Inscrit
5 Juillet 2013
Messages
39
Reactions
0
#13
Re: type de packet / connection au serveur D.

Merci beaucoup,
ça va me permettre de corriger le mien.
 
Haut Bas