Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/04/2010, à 22:00

diplomats

C , Socket , Probleme de cast

Bonjour
je bute sur un problème suivant
j'ai ma fonction

struct sockaddr * getsock(string machineId)
{

      char *htoname = (char*)machineId.c_str(); //adresse de la machine
      u_long toaddr;
      u_long fromaddr;
      int port = 12345;
      struct sockaddr_in *to;
      struct hostent *toinfo;
       u_short portnum = port;
       socklen_t  addr_in_size;
      //from = (struct sockaddr_in *)malloc(addr_in_size);

      to = (struct sockaddr_in *)malloc(sizeof(struct sockaddr_in));
      if(!to)
      {
           printf("ERREUR: Pas assez de mémoire \n");
           exit(-1);
       }

	if((toinfo = gethostbyname(htoname)) == NULL){
	  fprintf(stderr,"Error %d in gethostbyname: %s\n",errno,strerror(errno));
	  exit(errno);
	};

	toaddr = *(u_long *)toinfo->h_addr_list[0];
		    
	addr_in_size = sizeof(struct sockaddr_in);
	memset((char *)to,(char)0,addr_in_size);

	to->sin_family = AF_INET;
	to->sin_addr.s_addr = toaddr; 
	to->sin_port = /*(htons)*/portnum;
	
	return (struct sockaddr *)to;	
}

et je l'appelle

to2=getsock(MESVOISINS[y].nom_machine);
		int re = sendto(sockfd, message, strlen(message), 0,(struct sockaddr*)to2, addr_in_size);
		if (re=-1)
		{
		  fprintf(stderr,"Error %d sendto: %s\n",errno,strerror(errno));
		  exit(errno);
		}

mais a la compilation j'ai ce probleme :
error: cannot convert ‘sockaddr_in’ to ‘sockaddr_in*’ in assignment


que puis je faire pour remedier a cela

Dernière modification par diplomats (Le 08/04/2010, à 22:05)

Hors ligne

#2 Le 08/04/2010, à 22:05

bibleu

Re : C , Socket , Probleme de cast

Salut
tu peux donner juste la ligne qui pose problème stp.

Edit: si tu remplace (struct sockaddr*)to2 par (struct sockaddr*)&to2

Dernière modification par bibleu (Le 08/04/2010, à 22:06)

Hors ligne

#3 Le 08/04/2010, à 22:15

diplomats

Re : C , Socket , Probleme de cast

la ligne qui cause probleme c'est celle ci

to2=getsock(MESVOISINS[y].nom_machine);

Hors ligne

#4 Le 08/04/2010, à 22:25

bibleu

Re : C , Socket , Probleme de cast

comment tu déclare to2 ?

Hors ligne

#5 Le 08/04/2010, à 22:31

diplomats

Re : C , Socket , Probleme de cast

comme cela :

struct sockaddr_in *to2;

Hors ligne

#6 Le 08/04/2010, à 22:49

bibleu

Re : C , Socket , Probleme de cast

C'est koi le string dans struct sockaddr * getsock(string machineId) ?

Hors ligne

#7 Le 08/04/2010, à 22:52

diplomats

Re : C , Socket , Probleme de cast

ca renvoi le nom de la machine sur laquelle on veut récupérer les informations pour pouvoir utiliser le sendto

Hors ligne

#8 Le 08/04/2010, à 22:56

bibleu

Re : C , Socket , Probleme de cast

ok chez moi sa compile sans warning si je fait ca:

struct sockaddr_in * getsock(string machineId){
...
return to;    
}

Hors ligne

#9 Le 08/04/2010, à 23:22

diplomats

Re : C , Socket , Probleme de cast

damn , comment tu fait moi j'ai cette erreur

cannot convert ‘sockaddr_in’ to ‘sockaddr_in*’ in assignment

Hors ligne

#10 Le 09/04/2010, à 17:28

bibleu

Re : C , Socket , Probleme de cast

hummm bizarre
il est gros ton code ? tu pourrait mettre la totalité et dire avec quel commande tu compile.

Hors ligne

#11 Le 09/04/2010, à 23:16

telliam

Re : C , Socket , Probleme de cast

diplomats a écrit :

comme cela :

struct sockaddr_in *to2;

si le proto de ta fonction est struct sockaddr * getsock(string machineId)
alors  ca devrait etre struct sockaddr* to2;


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne