2010-07-07 9 views
0

Je développe un programme au-dessus d'un code de base en prenant soin de la programmation de socket de bas niveau. Le problème semble être que la seule façon dont il sait (apparemment) quand arrêter de fermer la connexion est quand la quantité d'octets reçus dépasse celle donnée dans le champ "Content-length". Mais puisque ce champ n'est pas défini pour de nombreux sites, je ne sais pas comment lui dire d'arrêter. Ce qui se passe maintenant est que dans ces cas, le fichier entier est téléchargé mais la connexion est toujours conservée.Comment savoir si la fin du fichier distant est atteinte en utilisant Winsock (VB6)?

Il doit y avoir quelque chose à rechercher dans les données/messages entrants? Merci.

+0

Événement réseau FD_CLOSE. D'oh. – mathon12

Répondre

0

Depuis votre mention du téléchargement de la fiche de Content-Length, téléchargez-vous un serveur web HTTP? Si tel est le cas, l'en-tête Content-Length est omis lorsqu'un Transfer-Encoding en-tête indique qu'un transfert chunked est utilisé, ce qui signifie que les données sont envoyées par petits blocs séquentiels (la taille maximale ne peut donc pas être indiquée dans l'en-tête Content-Length). Chaque bloc a son propre en-tête qui spécifie la taille de son bloc. Vous devez analyser et ignorer chaque en-tête de bloc afin de ne pas les enregistrer dans votre fichier cible, uniquement les données de bloc. La fin du fichier est atteinte lorsque vous recevez un en-tête de bloc qui indique une taille de données de 0.

Lire RFC 2616 Section 3.6.1 pour plus de détails.