Ach te Stream'y...

0

Dzień dobry, wiem że ten temat był już wałkowany 10 tysiecy razy
ale "kto pyta nie błądzi" :)

Preambulum
Chdzi mi wysyłanie pliku. Znalazłem już odpowiedź co prawda.
Można to zrobić przy pomocy komponetów NMStrm i NMStrmServ, ale jest to dosyć problematyczne, ponieważ z tego co zobaczyłem
da się tylko przesłąć plik z NMStrm do NMStrmServ natomiast
w odwrotną stronę nie.

Wiem oczywiście że można wstawić oba na formę, ale to nie
rozwiązuje problemu przesyłąnia plików między adresami
Rutowlnymi i Nie-rutowalnymi.

Jedyne co mi się nasuwa na myśl to, ClientSocket i ServerSocket.
Niestety genialni programiści z firmy Borland nie pomyśleli o tym
i w swoich komponetach zrobili funkcję SendStream, a
zapomnieli o ReceiveStream. Jest tam natomiast coś takiego
jak ReceiveBuf.

Pytanie
Czy przy pomocy tego Buf'u można przesłać plik?
Jeżeli tak to jak to zrobić?

Mam nadzieję że jakiś dobry człowiek z pasją uszczęśliwiania
innych, udzieli mi opdowiedzi na moje dręczące mnie pytanie i
będę mógł znowu zasnąć.

Mateusz Piechnat

0

No dobra, widzę że mój post nie cieszy się popularnością.
Myślę że przesyłanie plików to chyba temat Tabu na tym forum.

Poczyniłem już pewne postępy, ale niestety to mi niedziała. hmm...
Błagam pomóżcie mi. ;(
Zkleiłem z helpa i kilku przykłądów takie oto dwie procedury ale
przesyłąją poprawnie pliki małych rozmiarów tzn. do 1024 do 2 KB chyba
ale jeszcze nie wiem dokładnie.

procedure TForm1.Button1Click(Sender: TObject);
var
FromF: file;
NumRead: Integer;
Buf: array[1..1024] of Char;
begin
OpenDialog1.Execute;
AssignFile(FromF, OpenDialog1.FileName);
Reset(FromF, 1);
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
clientsocket1.Socket.SendBuf(buf, NumRead);
until (NumRead = 0) or (NumRead &lt&gt SizeOf(Buf));
CloseFile(FromF);
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
ToF: file;
NumWritten: Integer;
Buf: array[1..1024] of Char;
begin
label2.Caption := 'Ok';
SaveDialog1.Execute;
AssignFile(ToF, SaveDialog1.FileName);
Rewrite(ToF, 1);
repeat
NumWritten := socket.ReceiveBuf(Buf,sizeof(Buf));
BlockWrite(ToF, Buf, NumWritten);
until (NumWritten = 0) or (NumWritten &lt&gt SizeOf(Buf));
CloseFile(ToF);
end;

Błągam ;( jeżeli ktoś wie o co w tym chodzi to proszę o przerobienie tego tak żeby działało na dużych plikach.

Pozdrawiam
piechnat

0

Błagam was pomóżcie mi,
;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;( ;(
siedze nad tym kilkanaście godzin i nie wien co z tym jest nie tak, a przecieŻ dla niektórych z was to pestka.
Ja już dłużej nie mogę, zaraz się odwodnie :-)

piechnat

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