smilefreeware Δημοσ. 6 Φεβρουαρίου 2012 Δημοσ. 6 Φεβρουαρίου 2012 FTP:TIdFTP; -------------- FTP.Host := 'users.sch.gr'; FTP.Port := 80; FTP.Username := 'user123'; FTP.Password := '12345678'; FTP.Connect; if FTP.Connected then begin FTP.ChangeDir('test'); FTP.Put('f:\123.txt','123.txt',true); FTP.Quit; FTP.Disconnect; end; Μάλλον γίνεται σύνδεση (περιμένω πολύ ώρα) και στο τέλος μου λέει ότι η σύνδεση διακόπηκε χαριτωμένα. Τι κάνω λάθος? (Προσπαθώ να κάνω upload αρχεία) Αισθάνομαι ότι κάτι δεν πάει καλά με username ή password.
iniohos Δημοσ. 6 Φεβρουαρίου 2012 Δημοσ. 6 Φεβρουαρίου 2012 βαλε ενα try....catch για να δεις τι γινεται ακριβως. Μαλλον παιρνεις timeout.
smilefreeware Δημοσ. 6 Φεβρουαρίου 2012 Μέλος Δημοσ. 6 Φεβρουαρίου 2012 EIdConnClosedGracefully error raised, with message : Connection Closed Gracefully. Μετά το FTP.Connect; έχω το CAPTION:='2'; όπου δεν εμφανίζεται. Αρα το το FTP.Connect αποτυγχάνει. Είναι σε DELPHI 7
iniohos Δημοσ. 6 Φεβρουαρίου 2012 Δημοσ. 6 Φεβρουαρίου 2012 δες αυτο... http://www.swissdelphicenter.ch/en/showarticle.php?id=1 με το simple solution, λογικα δεν θα εχεις προβλημα. Because the EIdConnClosedGracefully is a common exception especially with certain servers it descends from EIdSilentException. On the Language Exceptions tab of Debugger Options (Tools Menu) you can add EIdSilentException to the list of exceptions to ignore. After this is added the exceptions will still occur in the code and be handled, but the debugger will not stop the program to debug them. και συγχωρεσε με που θα επιμεινω αλλα ποσο το εχεις το timeout? Και επισης δοκιμασε και αυτο... try FTP.Connect; except on E : Exception do if E is EIdConnClosedGracefully then else raise; end;
smilefreeware Δημοσ. 6 Φεβρουαρίου 2012 Μέλος Δημοσ. 6 Φεβρουαρίου 2012 Το διάβασα και εγώ αυτό από το SwissDelphi.... (το έβαλα όπως έλεγε να είναι εκτός) Ταυτόχρονα με κάποιες δοκιμές που κάνω (δεν ξέρω ποιες) κολλάει μάλλον το router της HOL και δεν έχω internet, οπότε έκανα και 3-4 reset(μπρίζα). Κατάφερα (δεν ξέρω πως) να περάσω και το if FTP.Connected then begin FTP.ChangeDir('test'); FTP.Put('f:\123.txt','123.txt',true); είμαι κάπου εδώ. Δεν ξέρω αν το κάνει τελικά upload. Ενα από τα τελευταία λάθη που πήρα ήταν : class EIdSocketError with message 'Socket Error # 10054 Connection reset by peer. "και συγχωρεσε με που θα επιμεινω αλλα ποσο το εχεις το timeout?" Τι και πως ακριβώς να δω ? Οσο για ερωτήσεις, κάνε ότι θες (Καμμιά φορά από βλακεία και μάλιστα μεγάλη δεν δουλεύουν). Ασχετο αλλά δεν μπορώ. Βλέπω ειδήσεις και ακούω πάλι για μάχες των πολιτικών για 13-14 μισθό. Εχετε δει πουθενά αεροπλάνα, κανόνια, πολυβόλα κλπ ? Τι διάολο μάχες είναι αυτές?
iniohos Δημοσ. 6 Φεβρουαρίου 2012 Δημοσ. 6 Φεβρουαρίου 2012 αυτο που σου βγαζει σημαινει πως προσπαθει να σε κανει redirect και πιστευω πως φταιει το ChangeDir που του δινεις. Προσπαθησε να το προσθεσεις κι αυτο μεσα στα exceptions του debugger καθως απο οσο διαβαζα στο embarcadero, το διαχειριζετε εσωτερικα το Indy comp. Το timeout θα το βρεις στα properties του component, στα αριστερα.
smilefreeware Δημοσ. 6 Φεβρουαρίου 2012 Μέλος Δημοσ. 6 Φεβρουαρίου 2012 Λοιπόν, ReadTimeout =0 (default). Εϊμαι έτοιμος για δοκιμή αλλά φοβάμαι πάλι το router της HOL. Δεν αποκλείεται η περίεργη συμπεριφορά σφαλμάτων που έχω να οφείλεται στο router της HOL. Το λέω γιατί πριν καιρό προσπάθησα να φτιάξω τον Total Commander για ftp και έφτανα σε σημείο που ήθελε το router reset(μπρίζα). Καλά είχα το fritz, αλλά μου το άλλαξαν και έφεραν ένα άλλο.
ntaryl Δημοσ. 6 Φεβρουαρίου 2012 Δημοσ. 6 Φεβρουαρίου 2012 καλησπερα Φιλε μου δοκιμασε το σε Επιπεδο .Να σιγουρευτεις
smilefreeware Δημοσ. 6 Φεβρουαρίου 2012 Μέλος Δημοσ. 6 Φεβρουαρίου 2012 καλησπερα Φιλε μου δοκιμασε το σε Επιπεδο .Να σιγουρευτεις Αν θες λίγο εξήγηση παραπάνω. Τι σημαίνει "σε Επιπεδο" ? Υπάρχει άλλος τρόπος μέσω Delphi 7 ?
Directx Δημοσ. 6 Φεβρουαρίου 2012 Δημοσ. 6 Φεβρουαρίου 2012 Θα μπορούσες να ρίξεις μια ματιά και στις ρουτίνες WΙΝINΕΤ που είναι αρκετά φιλικές και συνήθως δεν με απογοητεύουν (σε αντίθεση με τα Indy :-\).
mvaggel Δημοσ. 6 Φεβρουαρίου 2012 Δημοσ. 6 Φεβρουαρίου 2012 Δοκιμασες το server με κάποιον FTP client και αποδεδειγμένα δουλεύει? Μήπως το port θα έπρεπε να είναι κάποιο άλλο (20 ή 21 ας πούμε)?
ntaryl Δημοσ. 6 Φεβρουαρίου 2012 Δημοσ. 6 Φεβρουαρίου 2012 Ενοοω Τρεχε και τα δυο κομματια(Client-server)στο μηχανημα σου .συνδεσου και τσεκαρισε αν δουλευει
smilefreeware Δημοσ. 7 Φεβρουαρίου 2012 Μέλος Δημοσ. 7 Φεβρουαρίου 2012 (επεξεργασμένο) Σίγουρα έχω σύνδεση με ftp. Και μέσω link από το "Θέσεις δικτύου" και από το WinSCP. Αν είμαι συνδεδεμένος με άλλο τρόπο μου λέει (το Delphi) ότι είμαι ήδη συνδεδεμένος. Οσο για τις πόρτες δοκίμασα με 21 και με 80. Το 80 το βρήκα με Php που έφτιαξα, ότι είναι του server. Ελπίζω να απάντησα σε όλα. Το σίγουρο είναι ότι σχεδόν με κάθε δοκιμή το router θέλει reset(μπρίζα). Αρα δεν μπορώ να είμαι σίγουρος για τα σφάλματα που παίρνω. Θεωρώ πιθανότερο πρόβλημα το router που δεν μ΄αφήνει να καταλάβω τι γίνεται. @Directx θα το κοιτάξω. ---------------------------------------------------------------------------------------- Τελικά ... http://www.delphibasics.info/home/delphibasicssnippets/httpfileuploadbytheunxplained Delphi + Php. Εκανα test και πέτυχε. Βιαστικά που είδα χρησιμοποιεί το form html μέσω του Delphi, χωρίς να πρέπει να κάνεις κλικ ή οτιδήποτε άλλο. (uses Windows, WinSock, SysUtils;) Θα το απλοποιήσω και θα σας το γράψω. Επεξ/σία 7 Φεβρουαρίου 2012 από smilefreeware
smilefreeware Δημοσ. 7 Φεβρουαρίου 2012 Μέλος Δημοσ. 7 Φεβρουαρίου 2012 Για όσους ενδιαφέρονται σας δίνω μια function και τέλος. Η μέθοδος αυτή είναι ίδια με την Html+form. Απλώς δεν χρειάζονται διάφορα κλικ μη τυχόν και έχουμε "τρύπα" στον Explorer. Βέβαια πρέπει να φτιάξετε και ένα αρχείο Php. Upload file with Delphi (WinSock) > function UpLoadFile(Host,PhpUrl,FileName:string):integer; { from http://www.delphibasics.info/home/delphibasicssnippets/httpfileuploadbytheunxplained uses WinSock upload.php file // data=formName , variable following <?php move_uploaded_file($_FILES['data']['tmp_name'], $_FILES['data']['name']) or die(''); ?> } function GetIPFromHost(const HostName:string):string; type TaPInAddr=array[0..10] of PInAddr; PaPInAddr=^TaPInAddr; var phe:PHostEnt; pptr:PaPInAddr; i:Integer; GInitData:TWSAData; begin WSAStartup($101,GInitData); Result:= ''; phe:=GetHostByName(PChar(HostName)); if phe=nil then Exit; pPtr:=PaPInAddr(phe^.h_addr_list); i:=0; while pPtr^[i] <> nil do begin Result:=inet_ntoa(pptr^[i]^); Inc(i); end; WSACleanup; end; function readFiletoString(fpath:string; var fbuffer:string):boolean; var fhandle: Thandle; dSize: DWORD; dRead: DWORD; begin Result:= False; fhandle := CreateFile(PChar(fpath), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0); if fhandle <> 0 then begin dSize := GetFileSize(fhandle, nil); if dSize<>0 then begin SetFilepointer(fhandle,0,nil, FILE_BEGIN); SetLength(fbuffer, dSize); if ReadFile(fhandle, fbuffer[1],dSize, dRead, nil) then Result:= True; CloseHandle(fhandle); end; end; end; var sSock:TSocket; sAddr:TSockAddrIn; sWsa:TWSAData; sPort,rturn:integer; data,fileContents,bodySize,bodyContents,hostIp,boundary,formName :string; filePath,remotefilename,script :string; begin sPort:=80; formName:='data'; filePath:=FileName; remotefilename:=ExtractFileName(FileName); script:=PhpUrl; boundary:='---------------------------282861610524488'; //read file if not readFiletoString(filePath,fileContents) then begin Result :=-1; exit; end; bodyContents := '--' + boundary + #13#10; bodyContents := bodyContents + 'Content-Disposition: form-data; name="'+formName+'"; filename="'+ remotefilename +'"'; bodyContents := bodyContents + #13#10 + 'Content-Type: application/octet-stream'; bodyContents := bodyContents + #13#10 + #13#10 + fileContents + #13#10; bodyContents := bodyContents + '--'+ boundary + '--' + #13#10; bodySize := IntToStr(Length(bodyContents)); //generate headers and body data := 'POST ' + script +' HTTP/1.1' + #13#10 + 'Host: ' + host +#13#10; data := data + 'User-Agent: Uploador' + #13#10; data := data + 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' + #13#10; data := data + 'Content-Type: multipart/form-data; boundary=' + boundary + #13#10; data := data + 'Connection: Keep-Alive' + #13#10; data := data + 'Content-Length: ' + bodySize + #13#10 + #13#10; data := data + bodyContents; WSAStartup($1010, sWsa); sSock := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //get ip from hostname hostIp := GetIpFromHost(host); if hostIp = '' then begin Result:=-2; Exit; end; sAddr.sin_family := AF_INET; sAddr.sin_port := hTons(sPort); sAddr.sin_addr.S_addr := inet_addr(PChar(hostIp)); rturn := connect(sSock, sAddr, SizeOf(sAddr)); if rturn = SOCKET_ERROR then begin Result:=-3; exit; end else begin rturn:=send(sSock, data[1], Length(data), 0); Sleep(4000); closesocket(sSock); Result:=0; end; end; //---------------------------------------------------------------------------------------------- //... Example ... //function UpLoadFile(Host, PhpUrl, FileName :string):integer; X:=UpLoadFile('users.sch.gr','/vasanagno/up/upload.php','C:\up\abcd.txt'); case X of 0: MessageBox(0,'File Uploaded!', 'Success', MB_OK); -1: MessageBox(0,'Error reading file', 'Error', MB_OK); -2: MessageBox(0,'Error resolving host', 'Error', MB_OK); -3: MessageBox(0, 'Error connecting to host', 'Error', MB_OK); end;
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα