FTP-Probleme
-
hi
also ich versuche schon lange ein programm zu schreiben das mir ein verzeichniss durchsucht und wenn eine neue datei dazukommt wird diese datei per ftp auf einen server gesendet.
ich habe echt schon alles versucht.
ich hab mich normal connected und die befehle gesendet aber das hat nicht funktioniert.
ich hab auch die windows api-funktionen verwendet aber das hat auch nicht so geklappt.
falls einer von euch einen beispielcode hat wie man sich mit einem ftp-server verbindet und ihn eine datei schickt wäre ich sehr dankbar.mfg killakathl
-
Zeig doch mal deine bisherigen Versuche über die API-Funktionen.
Siehe: http://msdn.microsoft.com/library/en-us/wininet/wininet/ftp_sessions.asp
-
hi
also den quelltext hab ich nicht mehr.
den hab ich gelöscht weil einfach nix gegangen is...
aber meine probleme warn das ich nich wirklich gewusst hab was ich in die funktionen schreiben soll.
zb. bei:
HINTERNET InternetConnect(
HINTERNET hInternet,
LPCTSTR lpszServerName,
INTERNET_PORT nServerPort,
LPCTSTR lpszUsername,
LPCTSTR lpszPassword,
DWORD dwService,
DWORD dwFlags,
DWORD_PTR dwContext
);
was is dwContext ?!?mfg killakathl
-
hi nochma
ich bin jetz ein bisschen weiter:#include <iostream> #include <windows.h> #include <wininet.h> using namespace std; #pragma comment(lib, "wininet.lib") int main() { HINTERNET handle; HINTERNET ftp_handle; char dir[256]; unsigned long dir_len = (unsigned long)256; handle = InternetOpen("test.exe", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, INTERNET_FLAG_ASYNC); ftp_handle = InternetConnect(handle, "home.pages.at", INTERNET_DEFAULT_FTP_PORT, "***", "***", INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, NULL); cout << FtpGetCurrentDirectory(ftp_handle, dir, &dir_len) << endl; cout << GetLastError() << endl; cout << handle << endl; cout << ftp_handle << endl; return 0; }die beiden handles sind ok aber bei FtpGetCurrentDirectory() bekomme ich false und bei GetLastError() kommt 997.
kann mir wer sagen was ich falsch gemacht habe oder kann mir einer sagen wo ich nachschaun kann was der wert 997 heist?mfg killakathl
-
habs jetz mit ner callbackfunktion versucht weil ich im internet was gelesen hab...
code:#include <iostream> #include <windows.h> #include <wininet.h> using namespace std; #pragma comment(lib, "wininet.lib") void __stdcall Callback(HINTERNET hInternet, DWORD dwContext, DWORD dwInternetStatus, LPVOID lpStatusInfo, DWORD dwStatusInfoLen); HINTERNET handle; HINTERNET ftp_handle; int main() { int ret; char dir[256]; unsigned long dir_len = (unsigned long)256; handle = InternetOpen("test.exe", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, INTERNET_FLAG_ASYNC); if (ret = InternetSetStatusCallback(handle, (INTERNET_STATUS_CALLBACK)&Callback) == INTERNET_INVALID_STATUS_CALLBACK) { cout << "InternetSetStatusCallback streikt... " << GetLastError(); } InternetConnect(handle, "home.pages.at", INTERNET_DEFAULT_FTP_PORT, "***", "***", INTERNET_SERVICE_FTP, INTERNET_FLAG_ASYNC, 1); Sleep(2000); cout << "ret: " << ret << endl; cout << "FtpGetCurrentDirectory(): " << FtpGetCurrentDirectory(ftp_handle, dir, &dir_len) << endl; cout << "GetLastError(): " << GetLastError() << endl; cout << "handle" << handle << endl; return 0; } void __stdcall Callback(HINTERNET hInternet,DWORD dwContext,DWORD dwInternetStatus,LPVOID lpStatusInfo,DWORD dwStatusInfoLen) { switch(dwInternetStatus) { case INTERNET_STATUS_CONNECTED_TO_SERVER: cout << "connected" << endl; break; case INTERNET_STATUS_CONNECTING_TO_SERVER: cout << "connecting" << endl; break; case INTERNET_STATUS_CLOSING_CONNECTION: cout << "closing" << endl; break; case INTERNET_STATUS_CONNECTION_CLOSED: cout << "closed" << endl; break; case INTERNET_STATUS_HANDLE_CREATED: INTERNET_ASYNC_RESULT *pRes = (INTERNET_ASYNC_RESULT *)lpStatusInfo; ftp_handle = (HINTERNET)pRes->dwResult; cout << "handle created" << endl; cout << "ftphandle " << ftp_handle << endl; break; } }hab jetzt wieder beide handles aber irgendwie kommt jetz bei FtpGetCurrentDirectory()der gleiche fehler mit fehlercode 997 (ERROR_IO_PENDING)
was hab ich falschgemacht?
leute ich bin am verzweifeln...mfg killakathl
-
ERROR_IO_PENDING - 997
Overlapped I/O operation is in progress.Quelle: MSDN :: System Error Codes
Das ganze kommt wohl daher, dass du INTERNET_FLAG_ASYNC verwendet hast...
Dadurch sagst du ja, dass du willst, dass die Funktionen sofort zurückkehren sollen und du eine Benachrichtigung willst, wenn die Abarbeitung fertig ist. In deinem Fall wird es wohl einfach die Verbindung noch nicht aufgebaut haben und evtl. ist dein Sleep einfach zu klein (wobei man wohl sinnvollerweise eher auf die Callback-Massage warten sollte)
-
leute ich liebe euch....
hab jetzt statt INTERNET_FLAG_ASYNC, INTERNET_FLAG_PASSIVE verwendet und es geht.
also ich probier jetz echt schon lang herum und es wollte wirklich net funktionieren aber... aber naja danke !!!mfg killakathl