Anuncios Google

Duda con sockets al sacar el tamaño

Buenas estoy probando la descarga con sockets.

Pero no me funciona muy bien ya que solo me deja bajar 32 kB.

Tengo este archivo en DropBox y al bajarlo con sockets solo descarga 32 KB.

El problema está aquí:

longitud = tonumber(cabecera:match("Content%-Length: (%d+)\r\n"))

Descarga 17299 bytes, cuando en realidad son más.

Al poner un os.message(longitud) me devuelve 17299.

 

Cómo lo soluciono?

Salu2

 


Risa Dos años en SCENEBETA Risa

Click aquí para ver la Entrada de Bitácora.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de NEKERAFA

Mmm...

Prueba a hacer un os.message(files.sizeformat(longitud)) , aunque de todas formas, postea el código donde utilizas los sockets para ver como lo descargas y tal.


NekeOS, el nuevo shell para PSP

PS4 500GB OFW, PS3 320GB OFW, PS3 500GB OFW, PSP 6.39 PRO-C Fix4.

Sony Xperia Z1 Compact con Android 5.1.1

Portatil Lenovo z50-70 Intel® Core™ i7-4510U y NVIDIA GeForce 840M con Elementary OS 0.3.2 Freya (64 bits) y Windows 10 (64 bits).

Imagen de jorge_97

Pues...

Es el code que tu me dejaste.

Pero el Max que puede descargar son 32 KB...

Raro...

Imagen de NEKERAFA

Mmm...

Pues a saber lo que te pasé, que ya no me acuerdo, aunque creo que tenía algunos errores gordos.

Imagen de jorge_97

..

wlan.init()
conexion = socket.connect("www.google.es", 80)
 
while not conexion:isconnected() do
	screen.print(10, 10, "Conectando...")
	screen.flip()
end
 
conexion:send("GET /images/logo.png HTTP/1.1\r\n")
conexion:send("Host: www.google.es\r\n")
conexion:send("\r\n")
 
screen.print(10, 10, "Cabecera enviada...")
screen.flip()
 
cabecera = ""
while true do
	cabecera = cabecera..conexion:recv(1)
	screen.print(10, 10, "Recibiendo cabecera...\n"..cabecera)
	screen.flip()
	if cabecera:find("\r\n\r\n") then break end
end	
 
screen.print(10, 10, "Cabecera recibida...\n"..cabecera)
screen.flip()
 
longitud = tonumber(cabecera:match("Content%-Length: (%d+)\r\n"))
archivo = io.open("logo.png", "wb")
archivo:write(conexion:recv(longitud))
archivo:close()
 
screen.print(10, 10, "Archivo descargado.")
screen.flip()

 

 

Lo único que he hecho ha sido cambiar el server por el de DropBox y el archivo.

Me baja bien los 32 primero KB.

El resto no los baja.

Salu2


Risa Dos años en SCENEBETA Risa

Click aquí para ver la Entrada de Bitácora.

Prueba si te los

Prueba si te los baja bien con http.get, porqué puede ser tanto "fallo" del code como del servidor...

 

Saludos!

Imagen de jorge_97

Con GET descarga bien.

El problema son los sockets que no me deja bajar más de 32 KB.

 

Prueba

Prueba haciendo un miarchivo:flush() cada 32768 Bytes, si sigue sin funcionar puedes probar a utilizar más de un misocket:recv(), por ejemplo, si tienes que descargar un archivo de 64 Kb sería hacer un bucle for y ponerle 2 repeticiones, luego tendrías que idear un algoritmo para hacer que funcione bien, por ejemplo, si el archivo ocupa 65 Kb...

 

Salu2!

Imagen de Chimecho

O también...

Podría meter el recv en el bucle e ir sumando la cantidad de bytes recibidos, y no salir hasta que se hayan recibido todos o hasta que pase X tiempo desde la última vez que se recibieron datos, es decir, X tiempo desde la última vez que la cantidad de bytes recibidos no fue cero.

 

Saludos!



PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]

07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD

Recuerda: Sé el intérprete -_-

Imagen de jorge_97

...

Ni una ni otra :(

Aquí dejo el CODE.

Reitero que todo funciona bien pero no descarga el total del archivo:

function download(server,file,destino)
 
 
conexion = socket.connect(server, 80)
 
screen.print(10,10,"Conectando...",rojo)
screen.flip()
 
repeat
	screen.print(10,10,"Esperando...",rojo)
	screen.flip()
until conexion:isconnected()
 
conexion:send("GET "..file.." HTTP/1.1\r\n")
conexion:send("Host: "..server.."\r\n")
conexion:send("\r\n")
 
screen.print(10,10,"Cabecera enviada...",rojo)
screen.flip()
 
cabecera = ""
while true do
	screen.print(10,10,"Recibiendo...",rojo)
	screen.flip()
	cabecera = cabecera..conexion:recv(1)
	if cabecera:find("\r\n\r\n") then break end
end	
 
longitud = tonumber(cabecera:match("Content%-Length: (%d+)\r\n"))
 
datos=""
while true do
	a=nil
	a=conexion:recv(1024)
	if a==nil then
		break
	else
		datos=datos..a
		screen.print(10,10,a)
		screen.flip()
	end
end
 
archivo = io.open(destino, "w+")
archivo:write(conexion:recv(datos))
archivo:close()
 
end

 

Espero que alguien pueda ayudarme


Risa Dos años en SCENEBETA Risa

Click aquí para ver la Entrada de Bitácora.

Imagen de Chimecho

Por favor

Lee detenidamente mi comentario... Es que no veo nada de lo que escribí en esa implementación.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.