Buenas...
Tengo una aplicacion cliente/servidor por sockets usando los componentes de Delphi. Los clientes pueden ser varios y, entre otras cosas, mandar determinados archivos al servidor, y he aqui el problema, cuando un cliente manda un archivo, el servidor va rellenando un stream con los datos recibidos mediante un bucle while, y claro, durante este proceso el form no se actualiza ni me permite seguir con otro cliente...
La idea seria que mientras se este recibiendo un archivo de un cliente el servidor se pudiera comunicar con cualquier otro cliente, no necesariamente para enviar/recibir otro archivo aunque si es posible mejor.
No me vale application.processmessages porque entonces se me interrumpe la transferencia...
Este es el bucle, ubicado en el evento OnRead del serversocket:
Código Delphi
[-]
try
while true do
begin
nReceived := Socket.connections[j].ReceiveBuf (Buffer, sizeof (Buffer));
if nReceived <= 0 then
Break
else
Stream.Write (Buffer, nReceived);
pb1.StepIt;
Sleep (500);
end;
Stream.Position := 0;
if directorio[Length(directorio)]<>'\' then
directorio:=directorio+'\';
stream.SaveToFile(directorio+archivo);
socket.connections[j].SendText('DOWN');
finally
end;
¿Hay otra manera de rellenar el stream sin un bucle while?
¿Se puede actualizar el form sin interrumpir la transferencia?
Me imagino que una alternativa seria usar Threads pero no hay manera de entender como funcionan...
Otra cosa que he descubierto despues de bastantes cabreos es que si en la linea:
Pongo:
Entonces no me llegan los archivos completos, variando la cantidad de datos recibida segun...
¿Alguna idea?
Gracias y un saludo.
JMGR