| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
MAC Lt

Registrado: 11 Ago 2002Mensajes: 77
|
Publicado: Lun 28 Jun, 2004 9:29 pm Asunto: Enviar archivos Por TCPIP |
|
|
Saludos necesito crear un programa que transfiera archivos atraves de TCP IP tipo el MSN Messenger puedo comunicar dos aplicaciones con socket pero no he encontrado la forma de enviar archivos les agradeceria me dieran una ayuda si hay algun componete que lo haga o algun ejemplo o idea muchas gracias.
 |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Lun 28 Jun, 2004 11:04 pm Asunto: |
|
|
Hola MAc,
bajate de aquí un ejemplo
http://adrian.org.ar/dat/iptrans%201_0_4.zip
Son dos componentes cliente - servidor, que implementan un protocolo que paquetizan el archivo y lo transmiten utilizando corrección de errores.
Funciona bien para archivos chicos, pruebalo para archivos más grandes, también tendrías que setear alguna opción de reenvío.
Si haces alguna mejora o corrección te pido que me la digas.
atte _________________ Adrián
http://adrian.org.ar |
|
| Volver arriba |
|
 |
MAC Lt

Registrado: 11 Ago 2002Mensajes: 77
|
Publicado: Mar 29 Jun, 2004 12:25 am Asunto: |
|
|
Muchas gracias ikis lo pruebo y te cuento, ya que los archivos a enviar son de aproximadamente 15 a 20 MB si le hago alguna cambio lo publico, muchas gracias.  |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Mar 29 Jun, 2004 2:44 am Asunto: |
|
|
Originalmente fue el trabajo practico de alguien para simular el protocolo TCP/IP y solo se pedía poderenviar
el tamaño de carga por paquete * el valor máximo del campo de tramas. (algo así como 1024 * 16 creo)
Ya que del lado que se recibe se valida el número de paquete. Tambien se posibilita enviar un error aleatorio en un paquete para re-solicitar el envío de una trama.
Como lo veo, analizandolo un poco puedes lograr resetear el campo nº de trama cuando alcanzas el valor máximo (creo q ya lo hice en la versión que te mandé) y así poder enviar cualquier tamaño de archivo.
Una cosa que si debes implementar es un timeout por si se desconecta algún extremo (cliente o servidor) Esto lo puedes hacer con un timer o alguna variable, aunque creo que tambien hay algo de esto.
En fin lo hice hace varios meses pero estoy seguro que funciona perfecto para archivos chicos.
atte _________________ Adrián
http://adrian.org.ar |
|
| Volver arriba |
|
 |
tresuves Invitado
|
Publicado: Mar 29 Jun, 2004 10:09 am Asunto: |
|
|
Saludos!
Ikis no me lo liess XDD
Por lo que he entendido lo que dice Ikis es una simulacion del envio de dos archivos utilizando el protocolo TCP... O sea.. control de errores.. reenvio de tramas.. timeouts,,, Pero.. eso es innecesario porque ya lo hace TCP/IP .. eso es una practica de la universidad tipica.. pero ineficiente.. y posiblemente con mas problemas que otra cosa.. ya que TCP ya lo lleva y estas haciendo doble trabajo.
Si quieres enviar archivos muy grandes.. te sugiero que lo hagas a pelo..
o sea.. Componentes TClientSocket y TServer Sockets.. he visto algun ejemplo por el foro.. el procedimiento seria Abres fichero.. vas cogiendo buffer a buffer y enviando... hasta que el archivo se acabe.. y en el otro lado recibiendo.
Estoy casi seguro de haber visto algun ejemplo en este foro.. busca bien.. o voy a ver si lo encuentro y te pasteo la dire.
Saludos!! |
|
| Volver arriba |
|
 |
tresuves Invitado
|
Publicado: Mar 29 Jun, 2004 10:22 am Asunto: |
|
|
https://cppbuilder.es/viewtopic.php?t=5903&highlight=tclientsocket
Aqui puedes ver un magnifico codigo de _leo que descarga un archivo de un servidor web.
Con este esquema, hacer el receptor y el emisor del file ya es modificar algunas cosillas.
Ahora mismo no tengo tiempo para hacerte las funciones, si sigues con problemas en cuanto me quede libre te hago un ejemplo.
Bys! |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Mar 29 Jun, 2004 2:37 pm Asunto: |
|
|
Estimado tresuves
el codigo funciona perfectamente y tiene la ventaja de manejar un tamaño de paquete, es decir controlas lo que envías y facilmente puedes actualizar un contador con el total enviado.
Lo de TCP/IP claro que se usa, ya que los socket son TCP y así se tiene la seguridad de que cada porción llegue a destino.
Repito FUNCIONA y no tiene problemas, al menos para archivos pequeños y con alguna breve modificación tambien con archivos grandes. |
|
| Volver arriba |
|
 |
MAC Lt

Registrado: 11 Ago 2002Mensajes: 77
|
Publicado: Mar 29 Jun, 2004 3:51 pm Asunto: |
|
|
Saludos, Muchas gracias a los dos por la ayuda realmente me ha sido util he estado probando el ejemplo que envio ikis y funciona a la hora de conectarse y enviar el archivo, pero al terminar de recibirlo en el cliente el archivo esta corrupto, osea pierde el formato de salida, he estado probando con archivos de tipo DWG, DXF, JPEG, ZIP y en todos los casos me da el mismo error no se si necesitara algo especial sobre todo para los archivos de tiopo DWG.
En estos momentos probare el ejemplo que envio tresuves para ver si tengo el mismo error les agradesco la ayuda y les comento cualquier resultado muchas gracias.  |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Mar 29 Jun, 2004 4:26 pm Asunto: |
|
|
MAC, por lo q probe funciona para archivos pequeños pero hay algun bug cuando quieres transmitir algo más grande, en el metodo de escritura del archivo. Tendrias q verlo.
De solucionarlo ya lo tienes hecho, pero si encuentras otra alternativa no hay problema. |
|
| Volver arriba |
|
 |
tresuves Invitado
|
Publicado: Mar 29 Jun, 2004 5:33 pm Asunto: |
|
|
Saludoss Ikiss y Mac
No dudaba que funcionara el codigo Ikis, pero pense que lo que quiere mac es mandar archivos por socket y no mandar archivos mediante la simulacion del TCP, que como bien dices ya lleva incorporado toda la correccion de errores etc y no hace falta reprogramarla.
Un saludo!
Ikis, no te lo tomes a mal, solo queria dar otra altermativa, la tuya seguro que funciona pero era por no entrar en el protocolo. quizas no se me entendio bien. sorry.
Un saludo! |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Vie 02 Jul, 2004 10:27 pm Asunto: |
|
|
Está todo bien, aunque reitero que existen algunas ventajas de enviar de ese modo (ya que tienes más control).
Luego, cada paquete que envías, al ser un socket TCP se controla con todas las reglas que conocemos.
atte _________________ Adrián
http://adrian.org.ar |
|
| Volver arriba |
|
 |
|