Ik ben bezig met een TSL FTP zender, gebruik makend van Indy10 voor win32. Deze maakt netjes verbinding, dit wordt bevestigd door de logs van mijn FTP server (FileZilla Server 0.9.19):
Dit gebeurt overigens in Implicit mode op poort 990.
Op dat punt blijft mijn programma echter steken, terwijl er volgens mij een authenticatie verzonden zou moeten worden. Dit lijkt niet te gebeuren. Na ongeveer een halve minuut volgt een timeout:
De gebruikte code is als volgt:
Overigens is de MessageBox met de login-message steeds leeg.
Ook wanneer ik gebruik maak van Explicit mode gaat het fout. Wanneer ik dan inlog, zie ik keurig verschijnen dat Indy een beveiligde sessie aanvraagt, de server bevestigt dit, en verbreekt de verbinding:
Maar aan de kant van mijn programma wordt er een exception ge-raised:
Waar ik zou verwachten dat Indy het verbreken van de verbinding verwacht en direct op poort 990 een veilige verbinding maakt...
Mijn code in Explicit mode:
Overigens heb ik zowel in Implicit als in Explicit mode geprobeerd om Connect() te vervangen door Login(). Deze lijkt echter niet veel meer te doen, en geeft bovendien een exception (access violation).
Wat doe ik hier verkeerd?
code:
1
| Connected, sending welcome message... |
Dit gebeurt overigens in Implicit mode op poort 990.
Op dat punt blijft mijn programma echter steken, terwijl er volgens mij een authenticatie verzonden zou moeten worden. Dit lijkt niet te gebeuren. Na ongeveer een halve minuut volgt een timeout:
code:
1
2
| 421 Login time exceeded. Closing control connection. disconnected |
De gebruikte code is als volgt:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| FileList := TStringList.Create; FTPClient := TIdFTP.Create(NIL); FTPClient.TransferType := ftBinary; FTPClient.Passive := false; FTPClient.Password := 'tussenkeulen'; FTPClient.Username := 'klant1'; FTPClient.IOHandler := OurIOHandler; FTPClient.UseTLS := utUseImplicitTLS; FTPClient.DataPortProtection := ftpdpsPrivate; FTPClient.Host := 'server-adres-weggehaald'; FTPClient.Port := 990; FTPClient.AUTHCmd := tAuto; try FTPClient.Connect('server-adres-weggehaald', 990); // Hier gaat het fout. except MessageBox(Handle, FTPClient.LoginMsg.Text.GetText, 'Fout 005', MB_OK ); try try FTPClient.Disconnect; except Label_Status.Caption := 'Opnieuw verbinden...'; end; FTPClient.Passive := true; FTPClient.Connect; except MessageBox(Handle, FTPClient.LoginMsg.Text.GetText, 'Fout 006', MB_OK ); Label_Status.Caption := 'Kan geen verbinding maken...'; MessageBox(Handle, PChar('Er is een fout opgetreden tijdens het maken van een verbinding. Onze excuses voor het ongemak.'), 'Fout 002', MB_OK ); Self.ModalResult := 1; end; end; |
Overigens is de MessageBox met de login-message steeds leeg.
Ook wanneer ik gebruik maak van Explicit mode gaat het fout. Wanneer ik dan inlog, zie ik keurig verschijnen dat Indy een beveiligde sessie aanvraagt, de server bevestigt dit, en verbreekt de verbinding:
code:
1
2
3
4
| Connected, sending welcome message... AUTH TLS 234 Using authentication type TLS disconnected. |
Maar aan de kant van mijn programma wordt er een exception ge-raised:
code:
1
| EIDSocketError with message 'Socket error # 10054 connection reset by peer' |
Waar ik zou verwachten dat Indy het verbreken van de verbinding verwacht en direct op poort 990 een veilige verbinding maakt...
Mijn code in Explicit mode:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| FTPClient := TIdFTP.Create(NIL); FTPClient.TransferType := ftBinary; FTPClient.Passive := false; FTPClient.Password := 'tussenkeulen'; FTPClient.Username := 'klant1'; FTPClient.IOHandler := OurIOHandler; FTPClient.UseTLS := utUseExplicitTLS; // FTPClient.UseTLS := utUseImplicitTLS; FTPClient.DataPortProtection := ftpdpsPrivate; FTPClient.Host := 'server-adres-weggehaald'; FTPClient.Port := 21; FTPClient.AUTHCmd := tAuto; try FTPClient.Connect('server-adres-weggehaald', 21); except MessageBox(Handle, FTPClient.LoginMsg.Text.GetText, 'Fout 005', MB_OK ); try try FTPClient.Disconnect; except Label_Status.Caption := 'Opnieuw verbinden...'; end; FTPClient.Passive := true; FTPClient.Connect; except MessageBox(Handle, FTPClient.LoginMsg.Text.GetText, 'Fout 006', MB_OK ); Label_Status.Caption := 'Kan geen verbinding maken...'; MessageBox(Handle, PChar('Er is een fout opgetreden tijdens het maken van een verbinding. Onze excuses voor het ongemak.'), 'Fout 002', MB_OK ); Self.ModalResult := 1; end; end; |
Overigens heb ik zowel in Implicit als in Explicit mode geprobeerd om Connect() te vervangen door Login(). Deze lijkt echter niet veel meer te doen, en geeft bovendien een exception (access violation).
Wat doe ik hier verkeerd?
[ Voor 0% gewijzigd door NaliXL op 14-11-2006 16:36 . Reden: Volledige logs weergeven ]
Genoeg is meer dan veel, en tart den overvloed