 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 15 Dic, 2005 8:32 am Asunto: Envio de Archivos por Client y Server Socket |
|
|
Hola, saludos ahora me toca a mi preguntar.
como le hago para introducir, dentro del bufer que envia un Socket hacia otro, el nombre del archivo.
ejemplo para enviar, un flujo de datos a un ServerSocket
| Código: |
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TOpenDialog *op;
TFileStream *ms;
char *Buf;
AnsiString sName;
op = new TOpenDialog(this);
if( !op->Execute() )
{
delete op;
op = NULL;
return;
}
sName = op->FileName;
delete op;
op = NULL;
if( !FileExists( sName ) ) return;
ms = new TFileStream(sName, fmOpenRead);
Buf = new char[ms->Size];
::memset( Buf, 0x00, ms->Size );
ms->Read(Buf, ms->Size);
//aqui el problema antes de enviar el buf, tambien meter el nombre del archivo
// en su caso tambien el tamaño del archivo, para saber cuantos bytes leer
this->ClientSocket1->Socket->SendBuf(Buf, ms->Size);//envio los datos y luego el nombre
delete [] Buf;
Buf = NULL;
delete ms;
ms = NULL;
}
//---------------------------------------------------------------------------
|
y este es el codigo para recuperar el archivo.
| Código: |
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{
Recibe(Socket);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Recibe(TCustomWinSocket *Socket)
{
int s = Socket->ReceiveLength();
char *p = new char[s];
::memset( p, 0x00, s);
Socket->ReceiveBuf(p, s);
// Creamos el archivo
// TFileStream *fs = new TFileStream("test.txt", fmCreate);
TFileStream *fs = new TFileStream("dato", fmCreate);
fs->Write(p, s);
delete [] p;
p = NULL;
delete fs;
fs = NULL;
}
//---------------------------------------------------------------------------
|
Como se ve, meto el codigo para recibir los datos el "Buf", ya que si se envian 2 archivos al mismo tiempo, se genera un socket para cada una de las conexiones. y asi no se corta o no se transfieren los archivos..
la pregunta es como enviar usando los componentes ClientSocket y ServerSocket un archivo y guardarlo con el mismo nombre a travez de una red..
he probado usando otros componentes, pero al parecer tiene cierta dificultad al ser puestos con el ClientSocket y el ServerSocket
alguna idea.. _________________
 |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 15 Dic, 2005 1:11 pm Asunto: |
|
|
Medio encontrado, ya que no permite archivos grandes hablamos de archivos arriba de 65 megas
http://www.sources.ru/magazine/1204/tsocket.html
se puede mejorar la funcion, pero eso lo hare mas adelante
Gracias, a todos por leer _________________
 |
|
| Volver arriba |
|
 |
MAC Lt

Registrado: 11 Ago 2002Mensajes: 77
|
Publicado: Jue 15 Dic, 2005 4:01 pm Asunto: |
|
|
| Saludos Cesar, yo tambien estoy trabajando en un proyecto similar de envio de archivos a traves de socket y la funcion que conseguiste esta perfecta solo 2 preguntas. porque dices que no funciona con archivos mayores a 65 megas he probado con archivos mayores a los 200 mb y me ha funcionado perfecto se tarda bastante pero funciona, la siguiente pregunta sabes como se podria hacer para poner un resume a esa funcion para que el cliente le ponga pausa y pueda seguir enviando el archivo mas tarde nose si me entiendes cuidate. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 15 Dic, 2005 9:15 pm Asunto: |
|
|
| Cita: | | porque dices que no funciona con archivos mayores a 65 megas he probado con archivos mayores a los 200 mb y me ha funcionado perfecto |
fue cuando quise enviar 2 archivos al mismo tiempo.
| Cita: | | sabes como se podria hacer para poner un resume a esa funcion para que el cliente le ponga pausa y pueda seguir enviando el archivo mas tarde |
Se tendria que hacer una clase, derivada, para poder establecer un "autoresume", como el comando resume que tienen los FTP, pero deberias modificar el envio del archivo por tramas, lo correcto es enviar tramas de 1024 para no tener problemas, pero en el servidor que recibe los datos, tambien se tiene que modificarlo para saber que archivo enviaste el nombre y la parte de donde te quedaste descargando, recuerda que son flujos de datos,
imagina lo siguiente el envio de datos, es como cuando tienes 10 vasos de agua (simulando 10 archivos) y los tiras al desagüe o en un tubo de cañeria, bien cuando los recibes del otro lado, debes identificar que parte del archivo archivo pertenece a que archivo, y eso es a travez de las tramas.
por eso indicaba que se tenia que mejorar la forma de enviar los archivos, otra cuestion, es que se manejen componentes esclusivos para FTP, lo que se intenta es enviar archivos al otro lado de una maquina, tal y cual fuera el MSN, como vez, no tiene pausa, envias o cancelas pero no tiene pausa, los FTP si lo tienen. _________________
 |
|
| Volver arriba |
|
 |
MAC Lt

Registrado: 11 Ago 2002Mensajes: 77
|
Publicado: Vie 16 Dic, 2005 1:17 am Asunto: |
|
|
Muchisimas gracias Cesar por la informacion, tienes razon en lo que me dices al enviar los archivos a traves de socket no tienen pausa al menos con el codigo tal y como esta, yo la aplicacion en la que estaba trabajando la tenia en FTP pero al ver la nueva version del builder y ver que los componetes con los que la habia hecho ya no me servian opte por hacerla con socket ya que son mas genericos, pero probare como me sale mejor,
porque sí necesito la opcion de pausar los archivos o darles un resume, te agradesco mucho la ayuda saludos. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 16 Dic, 2005 10:42 am Asunto: |
|
|
no hay problema, en cuanto mejore la funcion seguro la pongo en Tips y Trucos
Estamos en contacto.. _________________
 |
|
| Volver arriba |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Sab 11 Abr, 2009 3:31 pm Asunto: |
|
|
Cesar pudistes mejora r la funcion , es que la pagina a la que haces referencia no se abre, me ayudas con el tema por favor? _________________ Todos somos ignorantes, lo que no todos ignoramos lo mismo... |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|