2013-03-15 3 views
0

Je dois envoyer deux octets en utilisant une socket tcp dans c.C-écriture et lecture à partir de sockets

Mon essayer jusqu'à présent:

static void send_request(int sockfd) { 
    uint8_t buffer[SEND_BYTES]; 
    uint8_t requestLowByte = 0; 
    uint8_t requestHighByte = 0; 

.... calculating the values for the two bytes 

    bzero(buffer,SEND_BYTES); 
    buffer[0] = requestLowByte; 
    buffer[1] = requestHighByte; 

    connfd = write(sockfd, buffer, strlen(buffer)); 
    if (connfd < 0) { 
     bail_out(EXIT_FAILURE, "ERROR writing to socket\n", progname); 
    } 
} 

mes valeurs de test: J'ai essayé d'envoyer les valeurs 248 et 127 dans une boucle sur le serveur. Sur le côté serveur j'ai reçu: 248 127, 7 248, 127 7, 7 7,7 7, 248 127 ... D'où viennent les valeurs supplémentaires?

Merci d'avance pour vos réponses,

Répondre

3

Cette ligne:

connfd = write(sockfd, buffer, strlen(buffer)); 

devrait être:

connfd = write(sockfd, buffer, SEND_BYTES); 
fonction

strlen est à la recherche d'un \0 pour calculer la longueur de la mémoire tampon, et puisque vous ne faites pas sûr qu'il ya un \0 après la deuxième valeur dans le tableau à envoyer, c'est un comportement indéfini là.

0

Qu'est-ce que SEND_BYTES? 2? Si oui, alors strlen ne fonctionne pas correctement, car le zéro final est remplacé par requestHighByte. Effectuez SEND_BYTES> 2 ou utilisez sizeof(buffer) pour déterminer le nombre d'octets.

Vous pouvez également vouloir vérifier si le résultat de write est exactement égal à la quantité de données que vous envoyez.