Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Incompatibilidad entre socket y TNMstrm

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Incompatibilidad entre socket y TNMstrm Responder citando

Hola mi pregunta es la siguiente:
Tengo dos programas que se comunican via socket, el caso es que cuando el cliente le envia un archivo al servidor via tnmstrm , el archivo llega pero el servidor se cuelga. He estado probando y me he dado cuenta que si desabilito la comunicación via socket mientras conecto, mando el archivo y desconecto el tnmstrm, el servidor no se bloquea, me gustaria saber si esto es correcto o es mera casualidad. Este es el codigo que uso en el cliente:

void __fastcall TForm1::enviarClick(TObject *Sender)
{
//Desactivo el socket
Cliente->Active=false;

//envio
TFileStream *MyFStream;
MyFStream = new TFileStream(Form1->Memo1->Text, fmOpenRead);
try
{
Form1->NMStrm1->Host = Form1->Dir->Text;
Form1->NMStrm1->PostIt(MyFStream);
}
catch(...)
{
}
MyFStream->Free();

//reestablezco la conexion via socket
Cliente->Active=true;

}

y este el codigo del servidor que recibe el archivo:

void __fastcall TServidor::NMStrmServ1MSG(TComponent *Sender,
const AnsiString sFrom, TStream *strm)
{

AnsiString dest;

dest=ExtractFileName(Gestor->Memo1->Text);

TFileStream *MyFStream;
MyFStream = new TFileStream(dest, fmCreate);
try
{
MyFStream->CopyFrom(strm, strm->Size);
}
catch(...)
{
}
MyFStream->Free();
}


Un saludo y gracias.
Volver arriba
Mensaje    Asunto: Responder citando

¿Porque tienes dos clientes?
Es decir, el TNMStr ya hace una conexion para enviar el archivo, por lo tanto el otro socket si apunta al mismo servidor con esta conexion estarias bloqueando la conexion del TNMstr y por eso se bloquea tu programa.
No se si me he explicado.

Un saludo.
mopa
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

En primer lugar muchas gracias por contestar mopa Wink ;
Realmente no entiendo a que te refieres con tener dos clientes, lo que tengo es un elemento TClientSocket para conversar con el cliente, mandar y recibir cadenas de texto, y por otro lado tengo el elemento TNMStrm para mandar archivos (imagenes, documentos..) entre el cliente y el servidor, para no tener que mandar el archivo por el Socket. En el servidor tengo un TserverSocket para recibir y mandar cadenas con el cliente y un TNMStrmServ para recibir los archivos. Creo que son necesarios los dos elementos ¿no? Por eso digo si mientras envio un archivo he de desconentar necesariamente el TClientSocket porque bloquea la conexión ya que apuntan al mismo servidor como tu dices no?, es eso?
Volver arriba
Mensaje    Asunto: Responder citando

Ahh, ya te he entendido.
Bueno, realmente lo ideal es usar simplemente Un TClientSocket y un TServerSocket, aunque reconozco que esto complica un poco la programacion sobre todo en el envio de los ficheros.
Pero bueno, en tu caso no deberias de tener ningun problema, eso si, el TServerSocket y el Otro server deben tener puertos diferentes logicamente.
Tambien ten en cuenta que si envias un fichero muy grande a lo bestia, posiblemente la aplicacion se bloqué.
Lo ideal es fragmentar el envio en un bucle e ir añadiendo processMessages en cada iteracion.
De todas formas yo no he utilizado mucho el componente TNMstr , asi que no se si podras controlar a bajo nivel el envio.

Bueno un saludo,
y espero haberte ayudado en algo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.