Thread View: borland.public.delphi.language.delphi.general
1 messages
1 total messages
Started by niobi
Wed, 22 Sep 2010 08:52
Error (loop?) Server during read data from socket
Author: niobi
Date: Wed, 22 Sep 2010 08:52
Date: Wed, 22 Sep 2010 08:52
73 lines
3795 bytes
3795 bytes
I've two procedures (client and server). Object components are InDy9 TIdTCP. SO is XP-HOME. Operations of the che client: // connection . try ... CliSok.Connect(); ... CliSok.ReadTimeout := 1000; ... CliSok.Socket.UseNagle := False; . except ... on E: ESocketError do ..... MesServ(4,'Connessione al server: +#10+'"'+E.Message +'"'+#10+'Riprovare...'); . end; // sending . try ... try ..... CliSok.WriteInteger(CarSped); // value of dimension data stored in CarSped ..... TmpStream := TMemoryStream.Create; ..... TmpStream.LoadFromFile(IndirProc+'\REPORT\TMS.DAT'); ..... CliSok.OpenWriteBuffer; ..... CliSok.WriteStream(TmpStream); ... except ..... on E: ESocketError do ....... MesServ(4,'Transazione non eseguita: ' +#10+'"'+E.Message +'"'+#10+'Riprovare...'); ... end; . finally ... CliSok.CloseWriteBuffer; ... FreeAndNil(TmpStream); . end; . CliSok.Disconnect; // chiude connessione al server Operations of the server: // inizialize the Server.Binding, then turn Server.Active to True . procedure SerSokExecute(AThread: TIdPeerThread); . var Size: integer; Proce,Codice: string; TmpStream: TFileStream; . begin . if AThread.Terminated or (not AThread.Connection.Connected) then Exit; . try ... Size := AThread.Connection.ReadInteger; ... if Size = 0 then Exit; // spedizione errata? ... TmpStream := TFileStream.Create(IndirArch+'\Trans1.txt',fmCreate); ... AThread.Connection.ReadStream(TmpStream,Size,False); ... if not FileExists(IndirArch+'\Trans1.txt') then ... MesServ(3,'Errore di scrittura della transazione su disco...'+#10+... 'provenienza: '+AThread.Connection.Socket.LocalName); . except ... on E: Exception do ... MesServ(3,'Errore in lettura dati: '+E.Message); Ok := False; . end; . FreeAndNil(TmpStream); . end; - - - The problem is in th OnExecute method: the server read the buffer, and create a file by TFileStream: all ok; but the flow of the procedure, after the "FreeAndNil()" row, come back to the row "if AThread.Terminated...", read the Size value from AThread object and terminates in error, jumping to the except module. The value "AThread.Terminated" return "True", but the client, after the sending, has closed the connection: why this? why the method Execute is re- actived after the read of the buffer? Instead to close the peer connection (with "Disconnect"), the client must close the socket connection (with "DisconnectSocket")? I am going crazy for this problem and I don't know how to go out. Please, give me a tip. Thanks for help. Antonio
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads