[SOCKETS UNIX] Ecriture/Lecture

Ecriture/Lecture [SOCKETS UNIX] - C++ - Programmation

Marsh Posté le 04-03-2005 à 13:37:28    

Salut à tous.
J'ai lu quelques tutos avant de m'attaquer aux sockets unix.
J'arrive disons à faire circuler du texte entre 1 serveur et 1 client.
Mais ce que je n'arrive pas, ca serait de faire circuler un autre type de données. Par exemple un tableau d'int, comment l'envoyer du serveur(ou client) vers le client (ou serveur).
Si quelq'un a une breve idee je suis preneur.
Merci

Reply

Marsh Posté le 04-03-2005 à 13:37:28   

Reply

Marsh Posté le 04-03-2005 à 16:41:25    

Le fait que tu utilises des sockets ne change rien au probleme en fait, tu utilises les memes fonctions standard read/write j'imagine (si tu utilise une connexion TCP)
 
Or avec ces fonctions, tu peux ecrire et lire ce que tu veux, pourvu que:
1) tu connaisses la taille de ce que tu ecris.
2) tu connaisses la taille et le type de ce que tu lis.
 
Bref, si tu ecris un tableau de 10 entiers avec write, il faut que de l'autre cote tu trouves le moyen d'identifier le type en question (un tableau de int en l'occurence) et sa taille. Or, autant pour le texte, c'est facile a faire, pour du binaire (tout ce qui n'est pas du texte en gros) il faut que tu t'imposes ton mini protocole.
 
Une solution simple est de d'utiliser une structure d'entete, quelque chose qui te donne justement les infos voules:
struct s_header
{
  int size;
  int type;
  // eventuellement les donnees apres
};
 
avant chaque write, tu remplis les infos qui vont bien dans ta structure, t'y ajoute les donnees et hop, tu envois!
 
Ensuite pour la lecture, etant donne que tu sais que tu dois lire une structure de type s_header, tu le fais.
Avec ca tu reccupere la taille et le type des donnees qui suivent, il te suffit juste de relire les donnees.
 
Evidement, ca demande d'ajouter (au besoin) certains controles sur les tailles, de bien definir les types echanges etc...
 
Attention, lorsque que tu lis ou ecris une structure, ne fais pas l'erreur de mettre des pointeurs dedans auquel cas tu lirais ou ecrirais la valeur du pointeur (l'addresse donc) et non les données pointes! (un pointeur c'est en general 32bits donc 4 caracteres)
 
Voila, j'espere que ca te mettra sur la piste, j'ai assume que tu utilisais le C.

Reply

Marsh Posté le 04-03-2005 à 17:36:14    

en fait, avec un pointeur ca va clairement segfaulter :/
le serveur envoi un pointeur qui pointe vers une adresse ds la ram du serveur  
et le client recoit le pointeur et essai d'acceder a la meme adresse mais sur sa ram a lui et la suprise  :whistle:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed