ADAM POMÓŹ

0

No Adam pomóż nam z tym wysyłaniem plików!

0

Niestety ja mam tylko modem :) i nie mam zbytnio mozliwosci testowania
takiego programu. Podejrzewam jednak, ze to bedzie tak:

  1. W katalogu Demos\Chat masz przyklad korzystania z gniazdek (komponenty:
    ServerSocket i ClientSocket).
  2. Wysylanie/odbieranie plikow bedzie sie odbywac (mam nadzieje :)) za pomoca
    takiego schematu:

    • otwieranie pliku - wczytanie go do strumienia:
      var
      sFile : TFileStream;
      begin
      sFile := TFileStream.Create('c:\plik.zip', fmOpenRead);

    • wysylanie strumienia:
      SendStream(sFile);

    • odbieranie strumienia:
      w procedurze OnRead komponentu mozna zastosowac ReceiveBuf
      lecz mam takze inny pomysl.

Mozna zastosowac strumien TWinSocketStream - radze poczytac w helpie.
Uwaga! Ten strumien nie pracuje z socketami, ktore maja ustawiona
wlasciwosc ClientType = ctNonBlocking; Tak wiec tworzymy strumien:

wFile := TWinSocketStream.Create(ClientSocket1.Socket, 60000);

Pierwszy parametr to nazwa gniazdka, a drugi parametr to TimeOut, czyli
czas (w milisekundach), po ktorego uplynieciu i nie otrzymaniu odpowiedzi
polaczenie zostanie uznane za zerwane.

Wysylanie: wFile.CopyForm(sFile, sFile.size); // kopiowanie strumieni
a wysylanie nalezy zrealizowac za pomoca funkcji:

function Write(const Buffer; Count: Longint): Longint; override;

Moze mozna to zrobic tak: zamiast kopiowac strumienie za pomoca CopyForm to
robimy: Write(sFile, sFile.Size);

odczyt przy pomocy Read. IMO trzeba to zrobic w petli, dopoki funkcja nie
zwroci wartosci 0 co bedzie oznaczac koniec odbierania...

No i tyle, co moge podpowiedziec...
--Pozdrawiam!
Adam Boduch
www.4programmers.net

0

Dzięki!!!

0

czy udało Ci się, Marcin?
bo mi nie :(--Pozdrowienia,
Imperior

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