[DELPHI]ip serwera FTP


(Skrzekacz) #1

Witam!

Mam za zadanie stworzyc wlasne FTP pracujace w sieci lokalnej. Wszystko prawie gotowe...

no wlasnie prawie, bo za nic nie moge zrobic zeby klijent automatycznie wyszukiwal mi ip

PC na ktorym stoi serwer #-o . Probowalem na wszystkie sposoby, np.

W FormCreate

IdFTP1.Username := 'anonymous';

IdFTP1.Password := 'haslo';

i:=0;

W Buttonie onCLick

while idFTP1.connected do

begin

idFTP1.host:='192.168.1.'+inttostr(i);

try

idFTP1.connect();

except

i:=i+1;

end;

end;

end;

Ta metoda niby w teorii dziala, ale zanim on dojdzie do prawidlowej koncowki ip, szczegolnie

gdy jest ona duza to musi wykonac mase prob polaczenia, ktore dlugo trwaja. Ustawienie

allocate na -1 spowoduje przeciazenie sieci.

Jezeli ktos zna jakis sposob na automatyczne wykrycie ip PC na ktorym stoi serwer bylbym

wdzieczny za pomoc :slight_smile:

Pozdrawiam


(inż. Piniol) #2

Może któreś z tych:

http://www.swissdelphicenter.ch/en/showcode.php?id=2452

http://www.swissdelphicenter.ch/en/showcode.php?id=2177


(Skrzekacz) #3

Niestety nie o to mi chodzilo :frowning: W podanych linkach jest kod, ktory wyswietla liste PC podlaczonych do sieci(z tego co zrozumialem) a mi chodzi o to zeby automatycznie wykryl na ktorym stoi serwer FTP. Gdzies slyszalem ze mozna wyslac plik z serwera na cala siec a potem jakas go pobrac nie majac ip serwera, jednak jak to zrobic to nie mam pojecia :oops: W kazdym badz razie potrzebuje czegos co sprawi ze nie bede musial podawac ip hosta gdy bede chcial pobrac plik z FTP [-o<


(Gina Gina) #4

Na przykład :wink: :

uses Winsock;


procedure TForm1.FormCreate(Sender:TObject);

var wVersionRequested:WORD;

    wsaData:TWSAData;

begin

 //Ładujemy bibliotekę Winsock

 wVersionRequested := MAKEWORD(1, 1);

 WSAStartup(wVersionRequested, wsaData);

end;


procedure TForm1.Button1Click(Sender:TObject);

var p:PHostEnt;

    s:array[0..128] of char;

    p2:pchar;

begin

 //Pobieramy nazwę komputera

 GetHostName(@s, 128);

 p := GetHostByName(@s);

 Memo1.Lines.Add(p^.h_Name);

 //Pobieramy jego adres IP

 p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);

 Memo1.Lines.Add(p2);

end;


procedure TForm1.FormDestroy(Sender:TObject);

begin

 //Zwalniamy Winsock

 WSACleanup;

end;


Na formie powinno znajdować się memo o nazwie Memo1. W podany sposób można też łatwo sprawdzić czy jesteśmy podłączeni do sieci. Gdy nie ma połączenia z Internetem to adres ma postać 0.0.0.0

(Skrzekacz) #5

Niech Bog Ci to w dzieciach wynagrodzi :smiley: