Witam wszystkich userów. Pobrałem kod z tej strony odnośnie gniazd lecz mam problem. Co zrobić aby zamknąć klienta jak plik jest wysyłany?
Jak dam do Form1.Close procedure Client.Close to niestety w programie serwer wyświetla że klient zerwał połączenie lecz w tym kliencie wygląda jakby plik był wysyłany.
Aby zaprzeczyć tej sytuacji w Client.Close dałem że w label1 pojawia się słowo koniec
W procedurze wysyłania pliku dałem if sprawdzające, że jeśli koniec to nie wysyła i nie wyświetla głupot czyli danych że niby wysyła...
procedure TMainForm.SendFile(const FileName: String);
var
SrcF : File;
RealSize : Integer; // realna odczytana wartosc z pliku
Buffer : array[0..Count] of char; // bufor przesylanych danych
TotalSize : Int64;
begin
TotalSize := 0;
AssignFile(SrcF, FileName);
try
{ otwieramy plik zrodlowy i okreslamy jego rozmiar }
Reset(SrcF, 1);
lblProgress.Caption := 'Wysy?anie pliku...';
ProgressBar.Max := FileSize(SrcF);
if IsServer then
Server.OnClientRead := RecievePercentage
else Client.OnRead := RecievePercentage;
repeat
if label1.caption <> 'koniec' then
begin
Application.ProcessMessages;
Sleep(10);
Seek(SrcF, TotalSize); // przesun na odpowiednia pozycje w pliku
{ tutaj nastepuje odczytanie 1 KB danych i przypisanie ich do bufora }
BlockRead(SrcF, Buffer, SizeOf(Buffer), RealSize);
if RealSize > 0 then // jezeli liczba odczytanych bajtow jest wieksza od zera...
begin
{ wyslij pakiet... }
if IsServer then
Server.Socket.Connections[0].SendBuf(Buffer, RealSize)
else Client.Socket.SendBuf(Buffer, RealSize);
TotalSize := TotalSize + RealSize;
end;
end;
until RealSize = 0;
finally
CloseFile(SrcF);
progressbar.Position:=0;
lblProgress.Caption := 'Plik wys?ano.';
end;
end;
Lecz forma się nie zamyka i nie da się jej zamknąć:
Cały sens działania:
Form1.Close -> Client.Close -> Label1.Caption := 'koniec'; -> if jeśli koniec to nie powtarza pętli chodź jest powtarzana ale jej skutków nie widać :)
Co zrobić żeby to zdziałało czyli, żeby podczas wysyłania pliku od klienta do serwera po próbie zamknięcia okna (programu) klient program się wyłączył?