socketa = socket.connect("url.com",80) while not socketa:isconnected() do screen.print(200,130,"Please, wait") screen.flip() end socketa:send("GET /aUpdate/cvers.txt HTTP/1.1\r\n") screen.print(200,130,"Enviando petición GET") screen.flip() socketa:send("Host url.com\r\n") screen.print(200,130,"¿Definiendo host?") screen.flip() socketa:send("\r\n") screen.print(200,130,"Enviando salto de linea") screen.flip() file = socketa:recv(1024) os.sleep(3) Version = file:match("Alpha:(.+)") Version = tonumber(Version) if ( Version == cVers ) then os.message("Congratulations, you have the last version") elseif ( Version > cVers ) then mensaje = os.message("Tere is a new version avaliable, Do you want to download it?",1) if ( mensaje == 1 ) then Obtener = socketa:send("GET /aUpdate/vers.zip HTTP/1.1\r\n\r\n") zips = io.open("update.zip","w") elzip = socketa:recv() zips:write(elzip) zips:flush() zips:close() zip.extract("update.zip","") end else screen.print(200,130,"Ups...Algo falló; "..Version.." tú mismo") screen.flip() end
Se queda en "Enviando salto de línea"
PD:Ya se que no extraigo la información del zip y que la meto con cabezera y todo en el archivo pero sabiendo en que falla lo primero supongo que lo 2º me sale.
transmisión instantánea.
Mm, quizás se te queda atascado en "Enviando salto de línea", por que envías el salto de linea, y automaticamente, en cero coma, lees 1024 bytes. Es decir, no le das ni siquiera tiempo a que las ondas wi-fi viajen por tu habitación. El sleep va antes del recv(), para dejar tiempo a que envies, y alguien responda.
Igualmente no es una práctica recomendada esto de enviar, esperar y leer. Y si no llega? Y si por cualquier razón tarda más de 3sec? Y si se cae la conexión? Y si se desconecta el wi-fi por que se va la luz?
Es decir, para programar bien, tienes que programar todas las posibilidades. Viendo que tu código es monohilo y no debe continuar hasta que llegue algo o algo muera, te recomiendo que hagas algo así (sí, parece más complicado, pero en resumen, es plantearte unas preguntas antes, y comenzar a escribir ifs y ifs...):
llegabien = false;
esperando = 0;
while true do
if (socketa and socketa:isconnected()) then
bla = socketa:recv();
if (#bla > 0) then
-- ha llegado algo. (podriamos comprobar ademas si lo que ha llegado es correcto y completo, o falta por llegar algo.
-- atender llegada correcta.
llegabien = true;
break;
else
-- aun no ha llegado nada. esperamos.
os.sleep(0.5);
esperando = esperando + 0.5;
if (esperando > 10) then
-- llevo 10 secs esperando y aquí no ocurre nada...
-- algo grave pasó, atender aquí.
llegabien = false;
break;
end
end
else
--algo grave pasó, atender aquí.
llegabien = false;
break;
end
end
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
Gracias, lo tomaré en cuenta
Gracias, lo tomaré en cuenta en el futuro
Ahora me conecto a mi red, pantalla negra, y se va al XMB.
hace lo que le has puesto
hace lo que le has puesto ;)
if (socketd and socketa:isconnected()) thensocketd, error tipográfico. querías poner socketa. Al no encontrarlo no entra en el if y termina el código.
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
Es verdad O.O, ahora estoy
Es verdad O.O, ahora estoy con la psp despues pruebo
EDITO:Cambiado y sigue igual
reinsisto en la conexión
reinsisto en la conexión ultra-rápida. inmediantamente después de conectar, isconnected() será false. no te entra el if, y sale. dale tiempo que conecte...
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
pongo while not
pongo
while not socketa:isconnected() do
screen.print(200,130,"Wait")
screen.flip()
end
Todo antes del 2° if(el de si esta conectado) y la psp se pilla.
PD:El host esta online.
Va, eso está bien, pero
Va, eso está bien, pero también dale tiempo después de enviar las peticiones, algo como...
Puedes meterle un contador ahi, para pararlo si después de un tiempo no llega nada, y poder reenviar la petición o algo así.
Me parece que DeViaNTe se
Me parece que DeViaNTe se refería a esto:
Espero que se te haya solucionado, cuéntanos si tampoco va.
Saludos.
EDITO: Me he equivocado, es socketa en vez de socketd (después del
while true do
, perdón .Mmmm.. Creo que no, porque
Mmmm.. Creo que no, porque ahí no se comprueba si se ha conectado el socket e indemdiatamente pide el archivo.
Puess... En vez de poner
Puess... En vez de poner socketa:isconnected(), pon socketa:isconnected()==true
Ahi si se comprueba si se ha conectado.
De hecho poner if
De hecho poner if socketa:isconnected() ... o if socketa:isconnected()==true ... es exactamente lo mismo ;)