La Web del Programador: Comunidad de Programadores
 
    Pregunta:  10064 - ¿CóMO ENVíO FLUJOS BINARIOS A TRAVéS DE SOCKETS?
Autor:  j gpe ram
Quiero enviar archivos de sonido o de video a través de una conexión con sockets, no tengo problema con mensajes de texto ( socket.sendtext('texto'); ), pero con archivos binarios tengo problema. Una buena referencia me serviría...

  Respuesta:  Rodrigo Flores
Un socket no es que envie texto sino que la representacion de salida de el si lo es, pero un socket en si manda bytes lo que tu puedes hacer es convertir tus bytes a ascii (lo que seria en lenguaje c un copymemory(char*, byte*, sizeof())), esto en pascal en mas menos dificil, pero no imposible, busca por funciones de manejo de memoria y utiliza los ^pointer para mover data, convierte (haz Cast) de tus datos byte a un string y envialos, al recibirlo haces el Cast inverso, de char a byte en tu caso es de string a byte.

pero ojo, que el string de delphi no es un tipo de dato ya que es una clase llamada TString, ella es nativa de delphi y al ser clase y hacer un posible cast o conversion como le quieras decir, es posible que tus datos no sean reales asi que te aconsejo que no ocupes clases para ello, maneja un dato intermedio de entre el string y byte que sea como un LPTSTR, char*, o PSTR, cosa que tu texto se mueva en memoria, pero no el texto mas los bytes de la clase string.

Un socket puede enviar lo que sea, bloques completos de memoria, pero los construyen para enviar texto porque es lo mas comun y facil de utilizar para todo el mundo.

PD: Fijate en el send del objeto socket, me parece (porque no recuerdo bien) que tiene un send pero de bytes.