Inicio / Wikis / Tutoriales / Los rincones del API Win32: Más sobre WinInet y HTTP - Jugando con el puntero del recurso

Los rincones del API Win32: Más sobre WinInet y HTTP - Jugando con el puntero del recurso

Tutorial creado por
27 de Agosto de 2005
Programación estructurada
El método más sencillo, y menos eficiente, es a través de la función InternetSetFilePointer, que ya explicamos en nuestro anterior artículo. Con esta función, conseguimos situar el puntero del archivo en una posición concreta, con lo que conseguiremos que las llamadas a InternetReadFile hagan la lectura a partir de la posición en que hemos situado el puntero. Con esto podemos descargar un rango determinado, por ejemplo:{ se abre la instancia de internet HINTERNET hInet = ::InternetOpen("Descarga segmentada", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, ); se abre la URL, enviando también las cabeceras adicionales HINTERNET hReq = ::InternetOpenUrl(hInet, "http://www.servidor.com/recurso.zip", NULL, , INTERNET_FLAG_RELOAD, ); almaceno en una variable el límite inferior del rango DWORD byteIni = 512; situamos el puntero en el byte 512 ::InternetSetFilePointer(hReq, byteIni, NULL, FILE_BEGIN, ); ... lectura (a partir del byte 512) del recurso con InternetReadFile ::InternetCloseHandle(hReq); ::InternetCloseHandle(hInet); }

Este sistema, aunque es muy sencillo de utilizar, tiene dos serios problemas:

  1. Para utilizar esta función es necesario que para la descarga se esté utilizando el caché de WinInet, ya que, en realidad, el desplazamiento del puntero se hace sobre el fichero local almacenado en el caché, y no de forma remota como podría parecer. Si estamos descargando archivos grandes (y precisamente para eso queremos la descarga segmentada), el caché contendrá una copia del archivo completo, por lo que puede ser un gran desperdicio de espacio.
  2. Como ya hemos dicho, la función InternetSetFilePointer en realidad lo que mueve es el puntero del archivo local almacenado en el caché de WinInet. Esto implica que, en realidad, existirá un único puntero por cada proceso, por lo que, si distintos hilos de ejecución utilizan este puntero, unos hilos estarán modificando el puntero de los otros. En resumen: no es posible utilizar esta función desde aplicaciones multi-hilo. Como dijimos anteriormente, un escenario habitual en las descargas segmentadas es utilizar varios hilos de ejecución para descargar cada uno de los segmentos, y como vemos, esto no es posible con InternetSetFilePointer.

Para solucionar estos problemas, que son bastante graves, nos tenemos que apoyar en una nueva característica del protocolo HTTP, introducida en la versión 1.1: los rangos.
Valora este capítulo:
Autor y licencia de 'Los rincones del API Win32: Más sobre WinInet y HTTP - Jugando con el puntero del recurso'
Juan Manuel Extraído de: http://www.lawebdejm.com

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Opiniona sobre 'Los rincones del API Win32: Más sobre WinInet y HTTP - Jugando con el puntero del recurso' (0)

Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.

Opina sobre este tutorial



* Valoración:
* Nombre:
* Correo electrónico:
* Título:
* Comentario:

Wikis relacionados con 'Los rincones del API Win32: Más sobre WinInet y HTTP - Jugando con el puntero del recurso'

Entramos en temas interesantes: el acceso a recursos remotos a través del protocolo de aplicación... Más »
El protocolo FTP desde el API WinInet. Con este curso aprenderás a hacer un pequeño... Más »
Comienzo con un nuevo tema dentro dentro de la serie Los rincones del API Win32.... Más »
Damos una visión detallada de una de las características más interesantes de esta tecnología de... Más »
Estudio sobre la doctrina católica.
¿Estás seguro de que deseas eliminar este capítulo?