Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-04-2016
Mendizabal Mendizabal is offline
Miembro
 
Registrado: Sep 2014
Posts: 31
Poder: 0
Mendizabal Va por buen camino
Transferencia de archivos entre equipos remotos

Buenas Club Delphi,
Creo que estoy en la sección correcta. Si no fuera así, que el moderador pertinente se sienta libre de mover el hilo.

Antes de nada una pequeña aclaración: He buscado y leído muchos hilos al respecto de los que voy a preguntar. Tanto aquí, como en otros foros. He visto mucha información al respecto, pero aún así me gustaría que me dirigieras un poco. También he de decir que gran parte de las dificultades que estoy hallando vienen por desconocimiento de base en telecomunicaciones.

Dicho esto, empecemos por el principio. Estoy programando un programa de gestión para una serie de clínicas. Hasta aquí todo bien, y nada que se salga de lo común. El problema que me encuentro es que dichas clínicas comparten pacientes e historiales médicos. Todo lo que sea información (digamos, texto) no me causa problemas. Todos los programas clientes apuntarán a la misma base de datos, con lo cual no hay problema. Es algo que he hecho cientos de veces y es bastante sencillo. Pero la cosa es que también tienen que compartir archivos de imágenes, y ahí sí que la cosa se me escapa. No lo he hecho nunca, y tampoco sé muy bien como plantearlo.

La arquitectura que he planteado es la siguiente: Un servidor en una de las clínicas sobre el que correrá la base de datos (SQL Server, en este caso, pero eso es lo de menos). El servidor ya lo he montado y funciona sin problemas. De hecho ya están operando con las aplicaciones de gestión y funciona a las mil maravillas. Como ya dije, lo he hecho cientos de veces. Para compartir archivos había pensado usar un servidor FTP (el propio de Windows, a ser posible, o FileZilla o programar yo mismo uno con IndyFTPserver). Luego, los programas clientes buscarían los archivos en el servidor, y los descargarían al equipo local. Del mismo modo, al añadir archivos nuevos, los clientes los subirían al servidor. El problema que tengo es que no logro ver el servidor FTP desde un equipo externo. He probado el propio de windows configurado mediante IIS, he probado el de FileZilla y he probado un servidor sencillo programado con el componente Indy FTPServer. En ningún caso logro abrir el servidor desde un equipo externo (ni con un cliente programado con el componente cliente indy FTP, ni mediante el cliente FTP de la consola de comandos de windows). Es muy probable que lo esté configurando mal, aunque yo me inclino a que se deba a un problema de seguridad. Obviamente he redirigido los puertos que voy a usar en el Router. También he habilitado los servidores FTP para que puedan pasar a través del firewall. Incluso he habilitado las comunicaciones mediante los puertos implicados en el firewall del sistema operativo. No sé si me he dejado algo, pero no se me ocurre que puede ser. Como dato adicional, el servidor me contesta al hacerle ping desde cualquiera de los clientes. Bueno, de hecho, como ya dije, los clientes comunican sin problemas con la base de datos. Así que el problema no viene por ahí.

Ya sé que la pregunta es muy general. Pero me gustaría, a ser posible, que alguien me guiara un poco en alguno de estos sentidos:

1.- Configuración correcta del servidor FTP. Tanto la configuración elemental (creo que eso lo tengo bien, pero vete a saber), como las posibles trabas de seguridad. Me da igual si es con el servidor FTP de windows, como si es FileZilla, como si es cualquier otro. Eso sí, descartaré opciones de pago salvo que sea algo totalmente imprescindible.

2.- Información sobre cualquier otro protocolo de transferencia de archivos que sea fácilmente implementable con Delphi. De hecho, si puede ser con Indy, pues mejor (no me gusta usar componentes de terceros que siempre acaban dando problemas). Al principio probé con un sistema simple cliente servidor, transfiriendo los archivos mediante el cliente TCP de Indy. En una red local ya lo he hecho algunas veces y no me ha dado demasiado problema, pero en equipos remotos es la primera vez. A lo mejor solo necesito un par de claves. Las formas en las que he programado estos servidores-cliente en una red local ha sido capturando streams. De hecho no recuerdo si me ayudasteis en este mismo foro, pero es bastante posible.

3.- Cualquier otra arquitectura posible. No sé me ocurre cual puede ser, pero hay mucho sabio por estos lares que tal vez tenga una solución mucho más sencilla para compartir archivos entre equipos remotos.

Varios datos relevantes:

- El servidor está corriendo sobre un sistema operativo Windows Server 2012. De todas formas, por causas ajenas a mi y que no tienen ningún sentido, en breve pasará a correr sobre un sistema operativo Windows 7. Si dependiera de mi, el servidor correría en Unix. Pero no depende de mi.

- Mi IDE de programación es Delphi XE6.

- Los Indy que estoy usando son la versión 10.6

Muchas Gracias.

Pd: He dicho que las clínicas deben poder compartir imágenes entre ellas. Pero también deben compartir archivos de vídeo.

Última edición por Mendizabal fecha: 28-04-2016 a las 15:40:03.
Responder Con Cita
  #2  
Antiguo 28-04-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
 
Registrado: Aug 2013
Ubicación: Argentina
Posts: 1.858
Poder: 9
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Yo creo que lo más sencillo es usar la base de datos.

Hay un tipo de campo, llamados blob o binarios, que guardan la información a nivel de bytes.

La forma más sencilla de trabajarlos desde Delphi es usando streams.

Básicamente cargas en un stream lo que sea que quieras guardar, y luego lo grabas en la base, como si fuera un campo más

Para recuperar el valor, lanzas un query, accedes al campo usando .AsStream y ese es el stream que usas para, por ejemplo, cargarlo en una imagen

Hay varios ejemplos en el foro
Responder Con Cita
  #3  
Antiguo 28-04-2016
Mendizabal Mendizabal is offline
Miembro
 
Registrado: Sep 2014
Posts: 31
Poder: 0
Mendizabal Va por buen camino
Cita:
Empezado por AgustinOrtu Ver Mensaje
Yo creo que lo más sencillo es usar la base de datos.

Hay un tipo de campo, llamados blob o binarios, que guardan la información a nivel de bytes.

La forma más sencilla de trabajarlos desde Delphi es usando streams.

Básicamente cargas en un stream lo que sea que quieras guardar, y luego lo grabas en la base, como si fuera un campo más

Para recuperar el valor, lanzas un query, accedes al campo usando .AsStream y ese es el stream que usas para, por ejemplo, cargarlo en una imagen

Hay varios ejemplos en el foro
Gracias.

No tenía ni idea de eso. Voy a investigar un poco, pero parece una solución cojonuda.

Muchas gracias.
Responder Con Cita
  #4  
Antiguo 28-04-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: Sep 2004
Ubicación: En algún lugar.
Posts: 28.396
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
De todas formas, el sistema por FTP es algo trivial y debería funcionarte sin problemas. ¿Has mirado antivirus?
Responder Con Cita
  #5  
Antiguo 28-04-2016
Mendizabal Mendizabal is offline
Miembro
 
Registrado: Sep 2014
Posts: 31
Poder: 0
Mendizabal Va por buen camino
Lamento hacer doble post.

Acabo de probar a cargar imágenes del servidor al cliente, y funciona a las mil maravillas. Rápido y sencillo. Sencillisimo diría. Ahora me falta hacerlo a la inversa, pero no veo que vaya suponer mayor problema.

Muchas gracias, de verdad. Me has ahorrado un montón de quebraderos de cabeza .
Responder Con Cita
  #6  
Antiguo 28-04-2016
Mendizabal Mendizabal is offline
Miembro
 
Registrado: Sep 2014
Posts: 31
Poder: 0
Mendizabal Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
De todas formas, el sistema por FTP es algo trivial y debería funcionarte sin problemas. ¿Has mirado antivirus?
Sí, había creado una excepción en el antivirus. Imagino que será una chorrada que se me escapa. Cuando tenga tiempo haré pruebas en otro equipo porque no puede ser que se me resista una cosa a priori tan sencilla.

De momento voy a utilizar la opción de la base de datos. Me crea la duda de si el crecimiento de esta va a ser desmesurado, pero con los equipos que hay a día de hoy, tampoco debería haber mayor problema con eso. De todas formas observaré la evolución de la base de datos, y el comportamiento con ficheros más grandes como vídeos. Básicamente, para mi arquitectura, me parece mejor opción utilizar la base de datos. Es un recurso que ya estoy usando, y me evita crear más vulnerabilidades abriendo puertos innecesarios, y creado excepciones en la seguridad. Tampoco es que una clínica vaya a ser a priori objeto de ataques, pero vete tú a saber.

Gracias de todas formas.
Responder Con Cita
  #7  
Antiguo 28-04-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: May 2003
Ubicación: Ciudad de México
Posts: 20.172
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
Cita:
Empezado por Mendizabal Ver Mensaje
Tampoco es que una clínica vaya a ser a priori objeto de ataques, pero vete tú a saber.
Quizá no, pero desde luego se trata de datos altamente sensibles y confidencial, como cualquier expediente médico.

LineComment Saludos
Responder Con Cita
  #8  
Antiguo 28-04-2016
Mendizabal Mendizabal is offline
Miembro
 
Registrado: Sep 2014
Posts: 31
Poder: 0
Mendizabal Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Quizá no, pero desde luego se trata de datos altamente sensibles y confidencial, como cualquier expediente médico.

LineComment Saludos
Sin ningún lugar a dudas. Por eso prefiero reducir las vulnerabilidades al mínimo. Y por eso quería usar un SO más robusto para el servidor. Pero, en fin, quien paga manda.
Responder Con Cita
  #9  
Antiguo 29-04-2016
Avatar de Combat-F2D
Combat-F2D Combat-F2D is offline
Miembro
 
Registrado: May 2003
Ubicación: Toletum
Posts: 446
Poder: 16
Combat-F2D Va por buen camino
y con SFTP sería factible????
__________________
un saludo: Julio
Responder Con Cita
  #10  
Antiguo 29-04-2016
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: Jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 5.721
Poder: 19
Ñuño Martínez Va camino a la famaÑuño Martínez Va camino a la fama
Sólo para tenerlo en cuenta, diré que la biblioteca Synapse está muy bien para realizar programas que accedan a una red, tanto clientes como servidores como peer-to-peer. Incluye varios protocolos completamente implementados, entre ellos FTP y pasarelas SSH. Personalmente me gusta más que Indy, a pesar de que parece estar en punto muerto desde 2013.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #11  
Antiguo 29-04-2016
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: Dec 2003
Ubicación: Zamudio
Posts: 1.375
Poder: 16
fjcg02 Va camino a la fama
Hola,
un consejo. Si metes ficheros en la bbdd, utiliza una tabla aparte para ellos, o incluso una bbdd diferente. Así puedes hacer backup de los datos por un lado y de las imágenes por otro. Lo digo por el tema de espacio ocupado y velocidad de las consultas cuando suba el espacio consumido.
Consultas: bbdd de datos, sólo datos, la velocidad es la misma. Cuando vayas a recuperar una imagen, accedes sólo al registro de la imagen a recuperar.

También se pueden zipear para que te ocupen menos espacio y la tabla no se desmadre. Sólo tienes que tener en cuenta que a la hora de recuperrlos tienes que deszipearlos.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #12  
Antiguo 29-04-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: Sep 2004
Ubicación: En algún lugar.
Posts: 28.396
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por fjcg02 Ver Mensaje
Si metes ficheros en la bbdd, utiliza una tabla aparte para ellos, o incluso una bbdd diferente.
Responder Con Cita
  #13  
Antiguo 29-04-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: Jul 2004
Ubicación: Barcelona - España
Posts: 15.657
Poder: 10
Neftali [Germán.Estévez] Tiene un aura espectacularNeftali [Germán.Estévez] Tiene un aura espectacular
Creo que llego un poco tarde, pero yo iba a recomendar lo mismo que ya han comentado otros compañeros.
Antes de utilizar otro protocolo/tecnología, prueba con la que ya tienes implementada. Es decir, utiliza la Base de Datos.

Hay discusiones (desde hare mucho tiempo) sobre si es conveniente o no guardar los archivos de este tipo (imágenes, vídeos,...) en la Base de Datos, incluso aquí hemos tenido alguna. Hoy en día las Bases de Datos han mejorado mucho en este aspecto e incluso mi opinión ha variado en este sentido (más sabiendo que estás utilizando SQL Server).

Piensa que si esta opción te funciona, te evitas tener que instalar el servidor, mantenerlo, programar copias de seguridad distintas. Debes implementar los métodos de seguridad diferentes para el servidor FTP,... En general te evitas duplicar trabajo.

Sí te recomendaría, pero utilizaras una Base de Datos distinta para imágenes, vídeos,... aunque sea simplemente para facilitar copias de seguridad, mantenimiento y el trabajo del día a día.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #14  
Antiguo 29-04-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: Sep 2004
Ubicación: En algún lugar.
Posts: 28.396
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¡Ainsss!... con la de críticas que recibía yo por aconsejar usar la base de datos para guardar archivos, imágenes y todo lo necesario
Responder Con Cita
  #15  
Antiguo 29-04-2016
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: Jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 5.721
Poder: 19
Ñuño Martínez Va camino a la famaÑuño Martínez Va camino a la fama
Los tiempos cambian, señor Notevi...
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #16  
Antiguo 29-04-2016
Mendizabal Mendizabal is offline
Miembro
 
Registrado: Sep 2014
Posts: 31
Poder: 0
Mendizabal Va por buen camino
Muchas gracias a todos señores.

Sí, lo de la base de datos a parte fue lo primero que pensé. De hecho así está ya. Ahora estoy pensando en algo para lidiar con el crecimiento desmedido de la DB. Una opción es crear un proceso en segundo plano que vaya haciendo backups en disco, y limpiando la DB. Luego, cuando se le pida, recupera el archivo del disco físico y lo vuelve a volcar en la DB. Tampoco es que vayan a estar todo el día subiendo y bajando archivos, pero sí que pueden llegar a ser bastante pesados. No quiero que la DB se me convierta en un monstruo.

El cliente, por su parte, también tendrá un proceso en segundo plano que será el encargado de realizar las transacciones.

En la base de datos estoy trabajando con FileStreams, que me ha parecido la opción más óptima.

Y sí, los tiempos cambian. Pero a los que se adelantan a ellos se les llama visionarios. Al menos a toro pasado, en el momento se los suele llamar locos .
Responder Con Cita
  #17  
Antiguo 29-04-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: Sep 2004
Ubicación: En algún lugar.
Posts: 28.396
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Mendizabal Ver Mensaje
Y sí, los tiempos cambian. Pero a los que se adelantan a ellos se les llama visionarios. Al menos a toro pasado, en el momento se los suele llamar locos .
Estoy como una cabra
Responder Con Cita
  #18  
Antiguo 30-04-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: Jul 2004
Ubicación: Barcelona - España
Posts: 15.657
Poder: 10
Neftali [Germán.Estévez] Tiene un aura espectacularNeftali [Germán.Estévez] Tiene un aura espectacular
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¡Ainsss!... con la de críticas que recibía yo por aconsejar usar la base de datos para guardar archivos, imágenes y todo lo necesario
Cierto, pero eran otros tiempos...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #19  
Antiguo 30-04-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: Sep 2004
Ubicación: En algún lugar.
Posts: 28.396
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Ñuño Martínez Ver Mensaje
Los tiempos cambian, señor Notevi...
Cita:
Empezado por Neftali Ver Mensaje
Cierto, pero eran otros tiempos...
Eso es porque no conocíais las bondades de Firebird para realizar ese trabajo, incluso en esos "otros tiempos"
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Duda con transferencia de parámetros de valor entre dos funciones.. linuxtin C++ Builder 10 21-08-2011 22:52:46
Transferencia lenta entre HDD ATA y HDD SATA Sergio J. Varios 1 22-04-2005 17:30:16
¿Como iniciar una sesión en equipos remotos de una LAN? jpep Internet 2 31-03-2004 21:53:37
Conexion de equipos remotos Onti Varios 0 26-12-2003 16:08:51
Transferencia de archivos Silver Varios 2 13-06-2003 23:12:38


La franja horaria es GMT +2. Ahora son las 05:28:13.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi