2012-02-13 5 views
1

Je me demande, pourquoi dois-je obtenir une réponse pas complète de mon serveur (Win) pour montrer son dans le client (* nix)/Pourquoi ne reçois-je pas une réponse complète du serveur?

Herer sont les codes:

Server (Win) : http://pastebin.com/CC1EHj0N<br /> 
Client (*nix) : http://pastebin.com/bFiLjMHh 

La demande du client (" Bonjour de Gentoo! ") Mon serveur va bien, mais la réponse que l'envoi au client ne rend pas complet au client.

Comme vous le voyez, j'utilisé:

char response[] 

Et puis avec le calibrage sizeof() dans la méthode d'envoi.

Dans le débogueur, j'obtiens un bon résultat, qui doit envoyer tous les sizeof octets.

Mais dans le client, que je reçois pas tous string :(

Pourquoi

Répondre

1

Il y a (au moins) 2 problèmes avec votre code:

  • Dans votre client votre Le tampon est plus petit que le message envoyé par le serveur. Ainsi, il est impossible de recevoir l'intégralité du message en une fois

  • Vous recevez une seule fois. Rien n'empêche TCP de vous remettre les octets un par un. TCP est orienté flux, même si vous fournissez assez d'espace (que vous n'êtes pas)

Pour développer sur le premier point:

  • vous envoyez ce message à partir de la serveur

    char response[] = "Hello from Windows 7 Home Basic!\r\n";` 
    result = send(sock_cli, response, sizeof(response), 0); 
    
  • ceci est votre tampon de réception:

    char mess[] = "Hello from Gentoo!\r\n"; 
    char buffer[sizeof(mess)]; 
    /* ... */ 
    
    recv(sock, buffer, sizeof(mess), 0); 
    

Pour commencer, vous pouvez faire en sorte que le client tente de recv dans un tampon qui est au moins aussi grand que le plus grand message envoyé par le serveur. Mais la vraie solution serait de recv dans une boucle.

Questions connexes