Problem z przesyłaniem plików :((((

0

Dlaczego poniższe procedury przesyłają pliki do 8192 bajtów,
a jak plik jest większy to zapisuje się to powyżej tej liczby?

procedure TForm.ButtonClick(Sender: TObject);
var
Plik: File;
Bufer: Array of Char;
begin
AssignFile(Plik, 'Jakiś_plik.txt');
Reset(Plik, 1);
SetLength(Bufer, FileSize(Plik));
BlockRead(Plik, Bufer[0], FileSize(Plik));
ClientSocket.Socket.SendBuf(Bufer[0], FileSize(Plik));
CloseFile(Plik);
end;

procedure TForm.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
Plik: File;
Bufsize: Integer;
Bufer: Array of Char;
begin
Bufsize := Socket.ReceiveLength;
AssignFile(Plik, 'Jakiś_przesłany_plik.txt');
Rewrite(Plik, 1);
SetLength(Bufer, Bufsize);
Socket.ReceiveBuf(Bufer[0], Bufsize);
BlockWrite(Plik, Bufer[0], Bufsize);
CloseFile(Plik);
end;

Ma ktoś jakiś pomysł żeby to działało dla plików każdej objętości?

Pozdarwiam...
piechnat

0

Może skorzystaj z komponentu NMStrm na zakładce FastNet.

0

Nie wiem :( ale pomyślałem :P

procedure TForm.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
Plik: File;
Bufsize: Integer;
Bufer: Array of Char;
i : integer;
begin
Bufsize := Socket.ReceiveLength;
AssignFile(Plik, 'Jakiś_przesłany_plik.txt');
Rewrite(Plik, 1);
SetLength(Bufer, Bufsize);
for i:=0 to length(Socket.ReceiveLength) do
begin
Socket.ReceiveBuf(Bufer[i], Bufsize);
BlockWrite(Plik, Bufer[i], Bufsize);
end;
CloseFile(Plik);
end;

jezeli cos to zamień linijkę for i:=0 to length(Socket.ReceiveLength) do

na

for i:=0 to length(Socket.ReceiveLength) - 1 do :)

wątpię, żeby zadziałało ale...no nie wiem :]

0

&gtwątpię, żeby zadziałało ale...no nie wiem :]

Chciałbym bardzo żeby zadziałało :) ale nie zadziałało :(

A co do NMSTRM to w tym trzeba podać IP osoby do której się wysyła
a jak ktoś ma nie-rutowlny adres to nie działa, dlatego tak
mi zalerzy na Socketach, bo wtedy ktoś z takim adresem morze
zainicjować połączenie.

piechnat

0

heh to moze zmien z array of char
na array of byte albo integer lub word ale raczej byte!

0

ZIOMBEREK napisał:
heh to moze zmien z array of char
&gtna array of byte albo integer lub word ale raczej byte!

A czy na pewno w tym problem, no bo to tak właściwie przesyła pliki
było by ok jak by mi ktoś poweidział jak zrobić żeby
BlockWrite dopisywało do pliku a nie nadpisywało.

A z tym Byte i Word spróbuje.

piechnat

0

piechnat napisał:
ZIOMBEREK napisał:
&gtheh to moze zmien z array of char
&gt&gtna array of byte albo integer lub word ale raczej byte!
&gt
&gtA czy na pewno w tym problem, no bo to tak właściwie przesyła pliki
&gtbyło by ok jak by mi ktoś poweidział jak zrobić żeby
&gtBlockWrite dopisywało do pliku a nie nadpisywało.
&gt
&gtA z tym Byte i Word spróbuje.
&gt
&gtpiechnat

Otworz przez Reset a nie Rewrite, a potem zrob
Seek(plik, FileSize(plik));--Pawel {Delphi6 }

Po pierwsze: naciśnij F1

0

A tak a propos przesyłania plików. Co jeśli pakiet zostanie zgubiony?? Wtedy cały plik ma inną zawartość??? Jak sprawdzić, czy przyszedł ten plik co chiałem, a nie inny???

0

&gtOtworz przez Reset a nie Rewrite, a potem zrob
&gtSeek(plik, FileSize(plik));

To już bardzo blisko ale pojawił się problem z zapisem, mogę pokazać na przykładzie pliku textowego z ciągłym 'asdasdasda', co 8192 bajty pojawia się coś takiego:

asdasdasda
asdasdasda
asdada
asdasdasda
asdasdasda
asdasdasda
asdasdasda
asdasdassdasda
asdasdasda
asdasdasda

a to później bardzo źle działa na EXEki :D

Zastanawiam się tak czy może po prostu jest ktoś kto wie jak to zrobić,
to bym go wtedy pomęczył ;)

a jak na razie pozostaje mi: {glowa}

Pozdrawiam
piechnat

1 użytkowników online, w tym zalogowanych: 0, gości: 1