Bonjour,
tout nouveau dans le réseau j'aimerais créer une application Client/Serveur. La partie sockets, connection etc est gérée mais il me manque l'essentiel : la "norme" de communication entre mes clients et mon serveur, comment se comprenne t-il ?
Alors j'ai pensé rapidos à une structure de message, dites-moi honnêtement si c'est nul.
Je construit la trame à partir de suite d'entier signé codé sur 16 bits, suivit d'une suite de paire<entier_signé_16_bits, valeur_string>.
Ce qui donnerais une trame comme:
entier_signé_16_bits entier_signé_16_bits... [entier_signé_16_bits string entier_signé_16_bits string]
Le premier entier serait la cible du message, j'en vois deux pour l'instant :
- account : tout ce qui concerne les données de l'utilisateur dans l'application en général (mot de passe etc)
- game : toutes les données qui concerne le jeu (position, score etc)
Le deuxième entier serait l'objectif du message :
- info : donne une info, comme ca gratuitement sans rien attendre en retour (exemple position des adversaires)
- ask : questionne, demande un retour d'information
- answer : répond à une question
Le troisième entier serait soit la question posée, soit une action.
Enfin le reste de la trame renseignerait les potentielles données necessaire à sa compréhension sous la forme <type de l'information (entier signé 16 bits), valeur string>
Exemples de message:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 // Concern of the message const qint8 CONCERN = 0; const qint8 CONCERN_ACCOUNT = CONCERN + 1; const qint8 CONCERN_GAME = CONCERN + 2; // Purpose of the message const qint8 PURPOSE = 10; const qint8 PURPOSE_INFO = PURPOSE + 1; const qint8 PURPOSE_ASK = PURPOSE + 2; const qint8 PURPOSE_ANSWER = PURPOSE + 3; // Content of the message const qint8 REQUESTS = 50; const qint8 REQUESTS_ASK_ACCOUNT_IDS = REQUESTS + 1; const qint8 REQUESTS_INFO_MOVE = REQUESTS + 2; const qint8 REQUESTS_INFO_SHOOT = REQUESTS + 3; // Type of data const qint8 TYPE = 150; const qint8 TYPE_USERNAME = TYPE + 1; const qint8 TYPE_PASSWORD = TYPE + 2; const qint8 TYPE_POS_X = TYPE + 201; const qint8 TYPE_POS_Y = TYPE + 202; const qint8 TYPE_POS_ANGLE = TYPE + 203; const qint8 TYPE_HEALTH = TYPE + 204;
Demande des identifiants :
serveur > CONCERN_ACCOUNT PURPOSE_ASK REQUESTS_ASK_ACCOUNT_IDS
client > CONCERN_ACCOUNT PURPOSE_ANSWER REQUESTS_ASK_ACCOUNT_IDS TYPE_USERNAME user_toto TYPE_PASSWORD password_toto
Changement de position :
client > CONCERN_GAME PURPOSE_INFO REQUESTS_INFO_MOVE TYPE_POS_X 50 TYPE_POS_Y 455
Bien sûr il faut gérer les incohérences, des messages comme ci-dessous serait sans-sens.
CONCERN_ACCOUNT REQUESTS_INFO_SHOOT TYPE_USERNAME user_toto
Enfin bref, je sais très bien que ce n'est pas une bonne solution, parce que ca me parait complexe de prévoir tous les cas dès le début, et de plus je trouve qu'il y a pas mal de traitement derriere pour comprendre le message.
Par contre il est vrai que ce genre de msg ne pèserais que qq octets
Comment faîtes-vous ? Merci beaucoup
Partager