Programmant d'habitude sous Windows, je suis en train de faire un petit soft et j'aimerais qu'il puisse tourner sur le plus de plateformes possibles.
J'arrive à résoudre les plus gros problèmes mais je me retrouve confronter à une question que je n'arrive pas à élucider :
Comment envoyer (en utilisant les sockets) une chaîne de caractères ASCII (caractères codés sur 8 bits allant de 0 à 127) sur des machines avec un type 'char' faisant plus de 8 bits ?
Par exemple, dans le cas d'un client HTTP, je vais envoyer la chaîne "GET / HTTP/1.0\r\nUser-Agent: monAgent/0.1a\r\nFrom: me@nowhere.org\r\n\r\n" à un serveur quelconque. La norme HTTP (dérivée de TELNET) indique qu'il faut envoyer les caractères sur 8 bits.
Donc sur les machines où un 'char' fait 8 bits, ça roule, je fais juste :
Code :
- char myRequest[] = "GET / HTTP/1.0\r\nUser-Agent: monAgent/0.1a\r\nFrom: me@nowhere.org\r\n\r\n"
- send( socket, (void *)myRequest, strlen( myRequest ), 0 ); // le 'void *' est juste là pour l'explication
|
Par contre sur les autres machines, je ne vois pas trop comment faire marcher cela... En effet, que va t'il se passer sur une machine où 'CHAR_BIT == 9' (par exemple) ? J'enverrais sur le réseau un bit de plus par caractère et le serveur à l'autre bout ne va jamais comprendre !
Je sais que ça n'a sûrement pas beaucoup d'importance, mais j'aimerais bien savoir comment je dois résoudre ce problème.
-- Edit : --
Après réflexion, je me suis dit que la fonction 'send' devait accepter la taille en 'char' plutôt qu'en octets. J'ai donc corrigé ce bug.
J'ai regardé le source d'Apache (qui est un soft porté sur de très nombreuses plateformes) et j'ai remarqué qu'à au moins un endroit ils envoient directement leur 'char *' au travers de 'send'. Donc a moins d'avoir des réponses, je vais assumer que c'est OK...
Message édité par gatorette le 18-12-2002 à 10:50:53
---------------
each day I don't die is cheating