Pagina 1 di 1

Berkeley Sockets: come posso inviare una stringa?

Inviato: ven 21 ott 2005, 10:30
da zacmarco

Codice: Seleziona tutto

//dichiarazione della struct da inviare al server
struct buffer{
	int ID;
   char nome[20];
};

//lato client
buffer buf;
buf.ID = 12345;
strcpy(buf.nome, "CIAO");
sendto(sd, &buf, sizeof(buf), 0, (const struct sockaddr *)&sad, len);

//lato server
recvfrom(sd, &buf, sizeof(buf), 0, (struct sockaddr *)&cad, (socklen_t*)&fromlen);

*** OUTPUT SERVER ***
ho ricevuto l'ID               : 12345
ho ricevuto la stringa         : CIAO
fin qui tutto ok! :D
se invece prova a sostituire il tipo del campo "nome" da char[] a string, e imposto la stringa con questa istruzione (invece di strcpy())

Codice: Seleziona tutto

 buf.nome = "CIAO";
il server non riceve più il valore corretto, escono output del tipo

Codice: Seleziona tutto

ho ricevuto l'ID               : 12345
M.ÿÿHßÕÿÿÿÿÿÿÿÿÿü#inga         : I..I.y. c.R.g.R.r.I.>B
(                 4
À
 žd@ðþÿÿoÿÿÿoðÿÿož
                 Ðd@0€@ ó       @°Ç@@
Ö@ð@r@0
@Ë
@°s@pÅ@°
@@
@°Ê°@LŸ
       @`Ÿ
          à
@@­        @ `@À
   @ ­
      à
@@Segmentation fault
string è incompatibile con le API sendto() e recvfrom()? o posso trovare un modo per aggirare il problema?

grazie!

Inviato: ven 21 ott 2005, 10:46
da useless
è impostare le stringhe in C con un'assegnazione che è sbagliato, altrimenti che motivo avrebbe di esistere strcpy()? poi be', in C manco esiste il tipo string...
se ti riferisci al C++, pensa che quello che mandi con sendto() è una sequenza di byte. se vuoi mandare un oggetto (quale qualcosa di classe string) devi quindi serializzarlo e fare il contrario dall'altra parte. cosa + semplice presumo sia inviare la stringa in formato C che puoi ricavare con il metodo della classe string c_str() (o un nome simile, ravana un po').

ricordo, come al solito, che x i problemi di programmazione c'è un forum dedicato: http://www.nogood.it/prog/.