J'ai deux idées pour vous:
- Utilisez XML pour le protocole. De cette façon, vous savez exactement quand chaque message se termine.
- Envoyer dans l'en-tête de chaque "paquet" la taille du paquet, de cette façon, vous savez combien de lire à partir du socket pour ce paquet spécifique.
Edit: Regardez ce code factice pour (2)
int buffer_size;
char* buffer;
read(socket, &buffer_size, sizeof(buffer_size));
buffer = (char*) malloc(packet_size);
read(socket, buffer, buffer_size);
// do something
free(buffer) ;
EDIT: Je recommande de regarder les commentaires ici, comme ils notent que le contect pourrait ne pas être prêt par un simple " read() ", vous devez garder" read() "ing, jusqu'à ce que vous obteniez la taille de tampon correcte.
Aussi - vous pourriez ne pas avoir besoin de lire la taille. Fondamentalement, vous devez rechercher la balise de fin de niveau supérieur du XML. Cela peut être fait en analysant l'ensemble du XML, ou en analysant le code XML que vous obtenez du flux jusqu'à ce que vous ayez 0 noeud "ouvert".
ne peux pas faire cela sans xml? Je peux juste analyser l'en-tête moi-même? – aks
Je pense que cela fonctionnera. Merci – aks
Il n'y a aucune garantie que 'read()' lira exactement ce que vous demandez. Vous devez faire une boucle jusqu'à ce que vous obteniez la taille de paquet complète, et si vous faites cela, vous pourriez aussi bien faire une boucle en cherchant le délimiteur de fin de paquet. – caf