Enviar archivo por TCP

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
nekv
Aprendiz de Mago
Mensajes: 41
Registrado: 12 Jul 2008, 00:08

Enviar archivo por TCP

Mensaje por nekv »

Hola, despues de bastante tiempo he vuelto!, Primero Feliz Navidad y próspero año nuevo. Bueno, vamos al pastel:

Como puedo enviar un archivo por TCP? He estado leyendo, y dicen que hay que transformar el archivo a binario o algo así, despues enviarlo y volver a convertirlo... alguien me puede orientar?

Gracias!
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Enviar archivo por TCP

Mensaje por Chefito »

Feliz navidad :smt001 .
Mirate la función TCPSend en la ayuda. Puede enviar datos de texto y binarios hacia un socket.

Primero tendrías que guardar esos datos en una variable. Para eso tienes que abrir el archivo de forma binaria y leerlo. Inmediatamente lo almacenas en una variable. Para esto mira las funciones FileOpen con el modo=16, y FileRead para leerlo.
Al recibir los datos (con TCPRecv), tendrás que almacenarlos en una variable. Tendrás que guardar los datos en un fichero también utilizando FileOpen con modo 18, y la función fileWrite para escribir los datos en el fichero.

A groso modo sería algo así. Mira todo esto en la ayuda.
También te digo que nunca he mandado datos binarios con tcpsend y los he recibido con tcprecv, pero la ayuda pone que pueden mandar y recibir cadenas de texto y datos binarios, asique....... :smt002 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
gna08
Hacker del Foro
Mensajes: 379
Registrado: 27 Sep 2008, 18:51
Ubicación: Cordoba, Argentina

Re: Enviar archivo por TCP

Mensaje por gna08 »

tal cual.. el problema es el limite cuando revibis el archivo.. o en este caso el dato binario, ya que se debe especificar el maximo de caracteres.. si superas sierto numero .. au3 te da un error sobre k no ay suficiente memoria o similar :O..
por lo tanto yo tengo una forma.. es cortar el archivo especificado. osea.. leer por parte e ir enviando consecutivamente los datos.. bueno.. eh probado con archivos pequeños.. tengo k ver con mas grandes y utilizar esta tecnica k te cuento..
si no tenes ni una idea. me decis y vamos viendo k sale.. :smt023
Saludos :smt006
Aunk no m Buskes, Seguro m enkontras!
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Enviar archivo por TCP

Mensaje por Ximorro »

Efectivamente tienes que "partirlo", pero no se trata de partir realmente el archivo, sino ir leyendo en bloques de, digamos, 10kb, y luego lo vas recomponiendo de la misma manera (mientras TCPRecv va recibiendo datos los vas escribiendo con FileWrite, sabes cuántos bytes han llegado con el segundo parámetro, importante porque el último bloque no tendrá 10kb exactos).

Te recomiendo forzar siempre el modo binario. Aunque las funciones TCP (y UDP) manejan fácilmente textos, lo miran de una manera curiosa: si hay bytes a cero deducen que es binario, sino supone que es texto. Por defecto el modo es "texto" por cuestiones de compatibilidad con versiones anteriores, pero no lo recomiendan.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Enviar archivo por TCP

Mensaje por Chefito »

Bueno sí, si el archivo es grande y tienes problemas para su transferencia es mejor partirlo y luego unirlo con fileopen en modo 17 (16+1), para que los datos se vayan agregando al final del archivo que se va recibiendo. También puedes ir almacenandolo en una variable según venga, pero como sea muy muy grande te va a ocupar mucha memoria.
Decir también para quien no lo sepa que tcp tiene corrección de paquetes.....quiero decir, si alguno de los paquetes enviados ha llegado mal, solicita al emisor que le vuelva a enviar ese paquete. Udp no. Coge todos los paquetes llegen como llegen. Esto hace que udp sea más rápido pero arriesgándote a que te venga un paquete en mal estado y no funcione el archivo. Udp se suele utilizar en intranets (mucha velocidad y pocos fallos) y tcp en internet.
Esto solo era un poco de información para quien no lo sepa :smt001 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
nekv
Aprendiz de Mago
Mensajes: 41
Registrado: 12 Jul 2008, 00:08

Re: Enviar archivo por TCP

Mensaje por nekv »

Uff me veo muy perdido jaja, pero probaré, gracias!
Avatar de Usuario
ainurzzz
Mensajes: 27
Registrado: 09 Sep 2007, 15:04

Re: Enviar archivo por TCP

Mensaje por ainurzzz »

nekv escribió:Uff me veo muy perdido jaja, pero probaré, gracias!

Nada, nada. Divide y vencerás.

Crea un script servidor, que escuche y luego otro script cliente, que hable (envíe). Comienza enviando caracteres sueltos. Una vez tengas esta estructura hecha, comienza con los archivos. Lee los foros gringos que hay muchos ejemplos y mejor enviar en binario, que hay caracteres como el NULL que pueden dar problemas.

Suerte!
nekv
Aprendiz de Mago
Mensajes: 41
Registrado: 12 Jul 2008, 00:08

Re: Enviar archivo por TCP

Mensaje por nekv »

Bueno, aqui estoy de nuevo.

He probado a enviar una imágen, y pero es que sólo se crea un fragmento de la imagen... no se si me explico.
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Enviar archivo por TCP

Mensaje por Chefito »

Lo hemos dicho 200.000 veces. Pon el código esté como esté y te lo miraremos. Dinos donde falla para ir directo al grano.

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Enviar archivo por TCP

Mensaje por Ximorro »

Amén :smt003
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
gna08
Hacker del Foro
Mensajes: 379
Registrado: 27 Sep 2008, 18:51
Ubicación: Cordoba, Argentina

Re: Enviar archivo por TCP

Mensaje por gna08 »

Chefito escribió:Lo hemos dicho 200.000 veces. Pon el código esté como esté y te lo miraremos. Dinos donde falla para ir directo al grano.

Saludos.
:smt003 :smt003 :smt003 :smt003 :smt033
Pero si es nuevo.. no sabe :smt031 jejej..!
Aunk no m Buskes, Seguro m enkontras!
Avatar de Usuario
ainurzzz
Mensajes: 27
Registrado: 09 Sep 2007, 15:04

Re: Enviar archivo por TCP

Mensaje por ainurzzz »

Lee este post. No lo he probado , pero las funciones tienen buena pinta.. :smt002

http://www.autoitscript.com/forum/index ... opic=46341

Ya nos cuentas!
nekv
Aprendiz de Mago
Mensajes: 41
Registrado: 12 Jul 2008, 00:08

Re: Enviar archivo por TCP

Mensaje por nekv »

Bueno, ahora eso ya lo he solucionado...

Ahora, tengo otra duda... es posible tener varias conexiones? Porque de esto si que no tengo ni la menor idea de como podría hacerlo..
xapu
Hacker del Foro
Mensajes: 82
Registrado: 12 Dic 2009, 15:42

Re: Enviar archivo por TCP

Mensaje por xapu »

podrias postear el codigo plix!
- 0 error(s), 0 warning(s) :smt098 FUCK YEA!
http://xapus.blogspot.com/
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Enviar archivo por TCP

Mensaje por Chefito »

nekv escribió:es posible tener varias conexiones? Porque de esto si que no tengo ni la menor idea de como podría hacerlo..
Claro que es posible. Una forma podría ser con un array de variables que reciban o manden datos, e ir comprobando las conexiones con un timer (ejemplo _Timer_SetTimer).

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Responder