Invalid orincomplete multibyte or wide character

Signaler
Messages postés
24
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
2 novembre 2009
-
Messages postés
24
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
2 novembre 2009
-
Bonjour,

le programme que je suis en train de faire doit permettre de se connecter à une socket existante, d'envoyer une donnée et en recevoir la réponse. Voici le code :
int main (int argc, char ** argv)
{
int mysock;
struct sockaddr_in myaddr ;
char * erreur = "0";
char * recv_data;
char * send_data = argv[2];
int port = (int)(argv[1]);
if(argv[1] == "help" || argc < 3)
{
help();
}
else
{
myaddr.sin_family = AF_INET;
myaddr.sin_addr.s_addr = INADDR_ANY;
myaddr.sin_port = htons ( port );
myaddr.sin_zero[8];

if ((mysock = socket(AF_INET,SOCK_STREAM,0)) != -1)
{
int reUseAddress = 1 ;
if (setsockopt(mysock,SOL_SOCKET,SO_REUSEADDR,(char *) &reUseAddress,sizeof(reUseAddress)) >= 0)
{
if((bind (mysock,( struct sockaddr * ) &myaddr,sizeof ( myaddr ))) == 0 )
{
if((connect (mysock, ( sockaddr * ) &myaddr, sizeof ( myaddr ))) == 0)
{
int nonBlockingIO = 0;
if (ioctl(mysock,FIONBIO,&nonBlockingIO) == 0)
{
//send ( mysock, send_data, sizeof(send_data), 0 );
write ( mysock, send_data, sizeof(send_data));
//recv ( mysock, recv_data, sizeof(recv_data), 0 );
read( mysock, recv_data, sizeof(recv_data));
if(errno != 0)
{
erreur = strerror(errno);
}
}
else
{
erreur = strerror(errno);
}
}
else
{
erreur = strerror(errno);
}
}
else
{
erreur = strerror(errno);
}
}
else
{
erreur = strerror(errno);
}
}
else
{
erreur = strerror(errno);
}

if(close(mysock) -1 && erreur 0)
{
erreur = strerror(errno);
}
if(erreur != 0)
{
printf("\nErreur : %s\n",erreur);
}
else
{
printf("Données envoyées : %s\n",send_data);
printf("Données reçues : %c\n",recv_data);
}
}
}


La connexion se passe bien mais lorsque je fais le write ( le send donne la même chose ), errno me renvoie "Invalid orincomplete multibyte or wide character".

Quelqu'un peut pourrait il m'aider ?

Merci d'avance

5 réponses

Messages postés
6
Date d'inscription
mardi 28 juillet 2009
Statut
Membre
Dernière intervention
1 septembre 2009

Ce probleme doit avoir un lien avec l'Unicode. Es-ce que vous compilez en Unicode ?
Messages postés
24
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
2 novembre 2009

Oué, j'ai oublié de préciser que le code est compiler sur un pc linux avec unicode utf-8.
Le fichier binaire est ensuite copié sur un linux embarqué.
Messages postés
24
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
2 novembre 2009

Je dois le changer en quoi et comment pour que ça marche ?
Messages postés
6
Date d'inscription
mardi 28 juillet 2009
Statut
Membre
Dernière intervention
1 septembre 2009

Je pense qu'il faut convertir la chaine unicode en série d'octets pour l'envoyer octet par octet au lieu de l'envoyer caractère unicode par caractère unicode vu que les fonctions C attendent 1 octet par caractère...
Messages postés
24
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
2 novembre 2009

Désolé, je me suis remis au c il y a peu de temps donc si tu pouvais me mettre un exemple ça serais sympa