No Adam pomóż nam z tym wysyłaniem plików!
Niestety ja mam tylko modem :) i nie mam zbytnio mozliwosci testowania
takiego programu. Podejrzewam jednak, ze to bedzie tak:
- W katalogu Demos\Chat masz przyklad korzystania z gniazdek (komponenty:
ServerSocket i ClientSocket). - 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
Dzięki!!!
czy udało Ci się, Marcin?
bo mi nie :(--Pozdrowienia,
Imperior