[..] Message privé TCP

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Teckos
Niveau 2
Niveau 2
Messages : 18
Enregistré le : mar. 18 sept. 2012 23:32
Status : Hors ligne

[..] Message privé TCP

#1

Message par Teckos »

Bonjour à tous,

Je me suis lancé dans la création d'un chat Client<>Serveur, je me suis basé sur l'UDF SimpleTCP de Matwachich, un grand merci à lui déjà.

Mais je rencontre un problème je voudrais créer un système de message privé entre utilisateur. Je pense qu'il faut que j'envoie une commande spéciale reconnu par le serveur pour lui dire que ce message est privé mais je ne comprend pas vraiment comment faire.

Je pense que ça fonctionne comme ça : Commande pour le serveur | Destinataire du message | Contenu du message.
Dans l'état je sais connais envoyer tout ça au serveur mais comment faire pour qu'il l'interprète, le traite et le renvoi à la bonne personne dans la foulée ?

Ca doit être à base de Stringleft tout ça mais le nom du destinataire ne feras pas toujours le même nombre de caractères, par exemple.

Bref je bloque sur plusieurs points donc si quelqu'un avais le courage d'analyser un le code et de me dire comment faire ça serais simpa, merci d'avance.
► Afficher le texteCode Client
► Afficher le texteCode serveur
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Message privé TCP

#2

Message par TommyDDR »

Juste en lisant votre message (sans regarder le code, pas le temps) :

Vous avez différents choix pour y parvenir.

1) Vous fixez une taille pour vos 2 premières données (Commande pour le serveur et Destinataire du message)
Admettons :
Commande : 3 caractères
Destinataire : 10 caractères
Commande nommé "1" sert à envoyer un message privé
Un utilisateur envoie un message privé "Coucou" à "TommyDDR"

L'envoi sera alors "001 TommyDDRCoucou"
(2 "0" avant 1 pour arriver à 3 caractères, 2 espaces avant TommyDDR pour arriver à 10 caractères)

Et dans votre serveur vous faites ($Reception = ce que vous reçevez par TCPRecv ou son équivalent):
► Afficher le textecode
Inconvénient : Vous devez fixer une limite pour vos premiers champs


2) Vous définissez un séparateur (plusieurs caractères de préférence) Je prends un caractère pour l'exemple mais cela fonctionnera pour plusieurs (pensez à créer une constante)
L'envoi sera alors "1|TommyDDR|Coucou"
Et dans votre serveur vous faites ($Reception = ce que vous reçevez par TCPRecv ou son équivalent):
► Afficher le textecode
Inconvénient : Il ne faut pas que l'un des champs contienne (dans sa donnée) le séparateur
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Teckos
Niveau 2
Niveau 2
Messages : 18
Enregistré le : mar. 18 sept. 2012 23:32
Status : Hors ligne

Re: [..] Message privé TCP

#3

Message par Teckos »

Merci beaucoup pour votre réponse.

La solution 2 répondra, je pense, à toute mes attentes. Et il n'y auras plus d'inconvénient si le séparateur contient plusieurs caractères, enfin si j'ai bien compris, car je pense faire quelque chose du genre "#!#".

J'essaye tout ça dés que j'ai le temps, en espérant que tout fonctionne :p
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Message privé TCP

#4

Message par TommyDDR »

Je vous conseille d'ajouter un/des caractère(s) non imprimable dans votre séparateur pour éviter que des petits malins puisse envoyer #!# à la main.

Ajouter dans votre chaine quelque chose du genre :

Code : Tout sélectionner

StringLeft(BinaryToString(1), 1)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Répondre