Si vous utilisez TCP:
Vous avez raison, il n'y a aucun moyen de « savoir » la quantité de données que vous allez recevoir. Cela vous donne quelques options:
1) Avant de transmettre les données d'image, envoyez d'abord le nombre d'octets à attendre. Ainsi, vos 4 premiers octets pourraient être l'entier de 4 octets "4096". Ensuite, votre client peut lire les 4 premiers octets, « savoir » qu'il attend 4096 octets, puis malloc(4096)
il peut donc espérer que le reste. Ensuite, votre serveur peut envoyer() 4096 octets de données d'image. Dans ce cas, sachez que vous devrez peut-être recv() plusieurs fois - pour une raison ou pour une autre, vous n'avez peut-être pas reçu tous les 4096 octets. Vous devrez donc vérifier pour vous assurer que vous avez obtenu tout la valeur de retour de recv().
2) Si vous envoyez un seul fichier, vous pouvez simplement le faire lire par votre récepteur. Et il peut garder recv() depuis le socket jusqu'à ce que le serveur ferme la connexion. Ceci est un peu plus difficile - vous devez garder une trace de combien vous avez reçu, et si votre mémoire est pleine, vous devrez réattribuer. Je ne recommande pas cette méthode, mais techniquement accomplir la tâche.
Si vous utilisez UDP:
Cela signifie que vous ne disposez pas d'un transfert fiable. Donc, les paquets peuvent être supprimés. Ils pourraient aussi arriver hors service. Donc, si vous allez utiliser UDP, vous devez fragmenter vos données en petits segments. L'expéditeur et le destinataire doivent avoir un accord sur la taille d'un segment (100 octets? 1000 octets?)
De plus, vous devez également transmettre un numéro de séquence avec chaque paquet, c'est-à-dire étiqueter chaque paquet # 1 , # 2, etc. Parce que votre client doit être capable de dire: si des paquets sont manquants (vous recevez les paquets 1, 2 et 4 - et manquent donC# 3) et pour vous assurer qu'ils sont en ordre (vous recevez 3, 2, puis 1 - mais lorsque vous les enregistrez dans le fichier, vous devez vous assurer que les paquets sont sauvegardés dans le bon ordre, 1, 2, puis 3).
Donc, pour votre mission, eh bien, cela dépendra de ce protocole que vous devez/sont autorisés à utiliser.