Witam :) za programowanie zabralem sie niedawno
Mam taki problem, che wysylac plik,zalozmy ze to jest jakas bitmapka,uzywajac Tstream (do odczytu) i TServerSocket, TserverClient
Staralem sie przeslac plik bit po bicie uzywajc BlockWrite BlockREad,ale program sie wysypywal:|
Napisal sam cos takiego,ale to nie jest nadal to czego potrzebuje.Owszem wszystlo ladnie pieknie,ale ostatni pakiet jest pusty! lub niepelny!
var
plik : Tfilestream;
Buffer : array [1..1024] of char;
petle:real;
petle2:integer;
begin
plik :=TFileStream.Create('1.bmp',fmOpenRead);
rozmiar:=plik.size;
Petle:=plik.Size div 1024;
petle2:=round(petle);
for petle2:=1 to petle2 do begin
plik.readBuffer(buffer,sizeof(buffer));
serwer.Socket.Connections[0].SendBuf(buffer,sizeof(buffeR));
end;
plik.Free;
Pliczek leci ladnie,client zapisuje, ostatni pakiet niepelny zostal przeslany i zawsze wiadac CZARNĄ LINIE.
Jak mam inaczej napisac ten serwer? jakis przykladzik ? pomoc?
// zamiast Petle:=plik.Size div 1024; daj Petle:=(plik.Size-1) div 1024 + 1; poza tym nie używaj sizeof przy sendbuf, bo w ten sposób zawsze wyślesz wielokrotność 1024 bajtów - Ł