Envoyer struct type via winsock

TNDFR Messages postés 9 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 2 octobre 2004 - 5 août 2004 à 15:39
 cs_djl - 6 août 2004 à 06:49
slt,
j'essay d'envoye struct type via winsock (chat programme)le struct comprend les info sur une personne connecter:

struct PERSON
{
int age;
int ss;
int weight;
char *name
} test_struct;

le server recoit tous les int mais pas le char?
pkoi?
si ya une autre theory pour collecter les info sur une personne connecter au chat n'hesitez pas a me faire un sign

29 réponses

cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
5 août 2004 à 15:55
normal char * est un pointeur donc tu recois 4 octects qui correspond à l'adresse mémoire de ta chaine sur ta machine.

@+
Arnotic,
Admin CS, MVP Visual C++
0
TNDFR Messages postés 9 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 2 octobre 2004
5 août 2004 à 16:10
Merci de ta reponse Arnotic,voila le code pour mieux comprendre
mon blem:
-------------Client----------------------------RESUME
test_struct.age=21;
test_struct.weight=63;
test_struct.name="Joe";

char txt[256];
memcpy(txt, &test_struct, sizeof(test_struct));

send(listeningSocket,txt,sizeof(test_struct),0);

------------------Server---------------------------RESUMEE

struct PERSON
{
int age;
int ss;
int weight;
char name[256]
} test_struct;

................
............
char txt[sizeof(test_struct)];
......
......
memcpy(&test_struct, txt, sizeof(test_struct));
------------------------------------------------------
mais quand je fai test_struct.name ya rien????!!!
est ce que je peux envoyee une class (object )via winsock ? je peux faire ca en java sans problem mais en c++....

please help
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
5 août 2004 à 16:20
test_struct.name="Joe";
marche pas.

strcpy((char*)&test_struct.name, "joe");

@+
Arnotic,
Admin CS, MVP Visual C++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 août 2004 à 16:23
Envoyer une classe, faudra un car scolaire !!!
On est pas dans le monde interprete des JAVAistes at autres danseurs ici, on envoie des ppaquets d'octets et rien d'autre.

ciao...
BruNews, Admin CS, MVP Visual C++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TNDFR Messages postés 9 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 2 octobre 2004
5 août 2004 à 16:30
Merci pour ta reponse;

le struct pour le Client est char *name,donc je peux faire test_struct.name="Joe";

et le struct pour le Server est char name[256],
tu vois la difference?

Client =char *name
Server=char name [256]

est ce qu'il ya une autre solution pour envoyer des info sur une personne connecter au serveur?
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
5 août 2004 à 16:30
BruNews> LoOl t'es danseur? J'timagine bien en tutu en peaux de chevre en train de te tremousser devant ton pc.

TNDFR et Arnotic> Comme la dis Brunews, via winsock il y a que des paquets qui transite. Soit des chaine de caractères. Y'a qu'a regarder le prototype de send() pour s'en assurer!

Shell
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
5 août 2004 à 16:32
c'est de chose totalement différente ! ! !

char * pointeur sur zone mémoire qu'il faudra que tu alloues
et que tu fasses aussi un
strcpy();

certainement pas : test_struct.name="Joe";

c'est faux !

@+
Arnotic,
Admin CS, MVP Visual C++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
5 août 2004 à 16:34
TNFDR> tu te prend la tete inutillement!
Envoie tes données prècèdé d'un FLAG, comme le font plein de client/serveur comme IRC.

Pour envoyer tes infos t'q qu'a faire un truc du genre
char Info[256] = "Name:TNFDR;;IP:127.0.0.1;;..."
Puis quand tu recois tes données tu les split pour en sortir chaque élement.
Regarde du coté de strtok pour splitter une chaine.

Shell
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
5 août 2004 à 16:34
DeAtHCrAsH -> des octects ! pas forcement des chaines de caractères ! nuance importante.

@+
Arnotic,
Admin CS, MVP Visual C++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 août 2004 à 16:35
test_struct.name="Joe"; NENNI !!!

On ne changa pas un pointeur d'adresse.
strcpy pour copier des donnees dans un buffer alloué.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
5 août 2004 à 16:36
pas optimisé ca : pour l'ip déjà tu peux mettre uniquement un DWORD donc 4 octects evite de mettre des caractères de spéarions mais reflechie : element 1 = X octects, ...

après lecture en partant que c est le pointeur du début du paquet tu fais c+X, ...

@+
Arnotic,
Admin CS, MVP Visual C++
0
TNDFR Messages postés 9 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 2 octobre 2004
5 août 2004 à 16:44
DeAtHCrAsH->on est dans l'age du POO;

pourtant quand je fais ca :
char *name;
name="didine";
MessageBox(hWnd,name,"",0);

le programme copile sans faute et ca marche.
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
5 août 2004 à 16:46
et ta mémoire tu l'alloue ou ? tu écris à ou dans la mémoire ? sur quoi ?

@+
Arnotic,
Admin CS, MVP Visual C++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
5 août 2004 à 16:48
Arnotic et BruNews> c'est pas fini les 2 chinois, il a pas l'air de comprendre grand chose a votre language.

Parlons peu, parlons bien........ Parlons vagin (fallait que je la sorte celle la)

Arnotic> Dans le cas de l'adresse IP, il peut bien entendu utilisé un DWORD. Seulement je ne sais pas de quel maniere il alloue l'espace memeoire pour ces variables, mais dans le cas d'une allocation dynamique, dur dur de se servir de la taille des infos envoyées au préalable. Les séparateurs reste assez simple d'utilisation mais comme tu l'as dis ne sont pas des plus optimisé.

BruNews> Tu fais de la poésie en C++ ?

Shell
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 août 2004 à 16:49
TNDFR>
char *name;
name="didine";
MessageBox(hWnd,name,"",0);

et quand sera envoye par winsock, pointera sur quoi ton pointeur ???

Va te mettre devant un bouquin de C et tu verras winsock plus tard, perte de temps pour le moment.

ciao...
BruNews, Admin CS, MVP Visual C++
0
TNDFR Messages postés 9 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 2 octobre 2004
5 août 2004 à 16:58
BruNews> il pointera sur un char name[256];
mais tous ca c dans la struct elle meme

t'as raison en tous ca
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
5 août 2004 à 17:05
Oulalala il est violent la le BruNews.
Tu t'es levé du mauvais pieds coco BriNious ?

TNFDR> Pour commencer je vois pas le rapport entre une histoire pointeur et la POO... Faut que tu m'expliques!

Ensuite je crois que pour toi la notion de pointeur est très confuse dans ton esprit!

DEFINITION :
Pointeur : Pour faire simple, un pointeur reprèsente l'adresse memoire du premier element que compose ta variable. Après bien entendu tu peux deplacer ton pointeur en l'incrémentant ou en le décrémentant!
Essaye cette exemple ca t'aidera surement mieux a assimiler la notion de pointeur:
char *ma_chaine = new char[256];

strcpy(ma_chaine,"Je suis un pointeur");

while(*ma_chaine)
{
    printf("%c\n",*ma_chaine);
    ma_chaine++;
}


Donc si t'as tout bien pigé winsock envoie des octets et si tu lui donne un pointeur a envoyé, il va t'envoyer l'adresse pointé qui comme te la dis Arnotic correspond a 4 octets.

Shell
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 août 2004 à 17:13
Mais non pas violent, c'est pour son bien.
Faut qu'il sache qu'une adresse memoire n'est valable QUE dans son propre processus, s'il envoie un pointeur (4 octets referençant une adresse), ne vaudra absolument plus rien a l'arrivee.
Faut au moins savoir difference entre pointeur et buffer, on envisage d'aller plus loin quand cela est acquis, pas avant.
Ne me semble pas avoir dit quoi que ce soit de deplace.

ciao...
BruNews, Admin CS, MVP Visual C++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
5 août 2004 à 17:29
Tu devrais faire prof dans les Universités j'suis sure que les etudiants t'écouterais ;)

Shell
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 août 2004 à 17:40
Le repete pas, j'ai fait prof un an (y a bien longtemps maintenant), j'ai abandonne sinon fallait que je me mette aux valium pour pas en tuer un par jour.

ciao...
BruNews, Admin CS, MVP Visual C++
0
Rejoignez-nous