• Domingo 22 de Diciembre de 2024, 13:01

Autor Tema:  Imagenes Por La Red  (Leído 1269 veces)

elchay

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Imagenes Por La Red
« en: Sábado 17 de Julio de 2004, 01:04 »
0
hola a todos primero quiero agradecer ya que con el ejemplo de delphi sobre chat pude hacer lo que tenia planteado pero ahora no se como enviar una imagen por medio del componente socket me podrian dar una idea o otro componente gracias :D

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Imagenes Por La Red
« Respuesta #1 en: Sábado 17 de Julio de 2004, 04:15 »
0
Lo mejor es que crees un protocolo propio para enviar un archivo, así enviarás un .jpg como imagen y listo:

Mejor si habilitas otro puerto sólo para intercambio de archivos.

Como los datos te llegarán goteando o a veces de golpe tal vez bloque y medio, medio bloque, mitad de dos bloques (parte final de uno e inicial de otro), tendrás que realizar la recepción de tal forma que vaya acumulando los pedazos hasta completar lo que esperaba recibir.

Ejemplo: Envías una archivo jpg de 32kb:

Nota:
Usa sendText, como en delphi se puede usar el #0, no hay problema.
* 4BytesACadena es una función que convierte en cadena 4 bytes=cadena de 4 caracteres.
"A" sería un prefijo, que indica que enviarás una archivo

- Enviar el nombre del archivo:

"A"+char(LongitudDeNombreArchivo)+NombreArchivoCompleto+4BytesACadena(LongitudArchivo)+

Varias llamadas a sendText() o sendbuffer() con los pedazos del archivo hasta completarlo. OJO cuidado, La longitud de la cadena del nombre de archivo DEBE SER EXACTAMENTE IGUAL a lo que indicas al inicio, igual debe pasar con la longitud del archivo que envías, con este método basta que envies un byte menos o demás para que todo se arruine (en ese caso desconecta todo y reinicia la conexión), pero si está bien hecho todo funciona bien.

Como las capas inferiores de software aseguran que TODO llegue en orden, no tendrás que realizar otras verificaciones adicionales.

Una vez que todo llegue completo, puedes seguir esperando más mensajes en tu puerto especial para archivos.

Para recepción:

reconoce la "A", luego sabes que DEBE llegar 1 byte con el tamaño de la cadena de archivo, ESPERA que gota a gota llegue todo el nombre de archivo, luego DEBEN llegar 4 bytes más con el tamaño del archivo, esperalos. Cuando los tengas sabrás cuantos bytes más deberás esperar e ir almacenando en algún lado hasta que lleguen completos, puede ser que puedas ir guardando en un archivo lo que llegue.

 También puedes incorporar la opción de no recibir un archivo, para eso tendrías que tener otro prefijo: "O" digamos para ofrecer archivo, si acepta, cuando llegue el prefijo "A", recibes el archivo, si no esperabas el archivo y del tamaño indicado, simplemente cierras la conexión. (Por eso es mejor tener otro puerto y conexión para enviar archivos para simplificar las cosas)

Finalmente: Los detalles adicionales y controles/seguridad que quieras agregar complicarán enormemente el programa, un chat sencillo es una cosa y otra un programa tipo messenger.

elchay

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Imagenes Por La Red
« Respuesta #2 en: Miércoles 21 de Julio de 2004, 03:26 »
0
bueno emilius gracias por la ayuda pero para ser sincero no te entendi nada bueno creo que yo tengo la culpa no pense que enviar una imagen de una pc a otra fuera tan complicado pero gracias por la ayuda