Página 1 de 1

Enviar archivo por TCP

Publicado: 28 Dic 2009, 20:06
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!

Re: Enviar archivo por TCP

Publicado: 29 Dic 2009, 00:24
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.

Re: Enviar archivo por TCP

Publicado: 29 Dic 2009, 06:56
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

Re: Enviar archivo por TCP

Publicado: 29 Dic 2009, 10:23
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.

Re: Enviar archivo por TCP

Publicado: 29 Dic 2009, 11:29
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.

Re: Enviar archivo por TCP

Publicado: 29 Dic 2009, 17:06
por nekv
Uff me veo muy perdido jaja, pero probaré, gracias!

Re: Enviar archivo por TCP

Publicado: 30 Dic 2009, 01:25
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!

Re: Enviar archivo por TCP

Publicado: 30 Dic 2009, 02:17
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.

Re: Enviar archivo por TCP

Publicado: 30 Dic 2009, 04:43
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.

Re: Enviar archivo por TCP

Publicado: 30 Dic 2009, 09:11
por Ximorro
Amén :smt003

Re: Enviar archivo por TCP

Publicado: 30 Dic 2009, 16:28
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..!

Re: Enviar archivo por TCP

Publicado: 31 Dic 2009, 00:02
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!

Re: Enviar archivo por TCP

Publicado: 02 Ene 2010, 16:08
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..

Re: Enviar archivo por TCP

Publicado: 07 Ene 2010, 23:45
por xapu
podrias postear el codigo plix!

Re: Enviar archivo por TCP

Publicado: 08 Ene 2010, 02:12
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.