Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Proxy-Server

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.01.2009, 14:20 Uhr
wulfgang



Hallo,
ich möchte ein Programm schreiben, das Dateien über einen Proxy-Server mit dem FTP-Protokoll eine Verbindung zu einem anderen Server herstellt.
Der Compiler läuft auch ohne Probleme nur beim Ablaufen des Programms kommt folgende Fehlermeldung:
Debug Assertion Failed
File f: \rmt\vctools\vc7libs\ship\atlmfc\include\afxwin1 .inl

Ich benutze Visual Studio 2005 und schreibe das ganze als Konsolenanwendung. Wo liegt mein Fehler?
Schon mal vielen Dank für die Mühe!


C++:
/////////////////////////////////////////////////////////
//Block zum Aufbauen der Verbindung
/////////////////////////////////////////////////////////


//Bibliotheken für FTP-Session
#include <afx.h>
#include <afxwin.h>
#include <afxinet.h>
#include <stdio.h>


int warte;

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
if (!AfxWinInit(::GetModuleHandle(NULL), NULL,
::GetCommandLine(), 0))
{

return -1;
}

//Objekt session wird erzeugt
CInternetSession session;
//Zeiger auf CFtpConnection
CFtpConnection *connection;

//Deklarationen für GetFtpConnection Member-Funktion
char servername[100]="beispielserver.org";
LPCTSTR pstrServer;
pstrServer = (LPCTSTR)servername;
LPCTSTR login = NULL;
LPCTSTR passwd = NULL;
INTERNET_PORT port = 21;
BOOL bPassive = FALSE;


cout << "Verbinde mit " << servername << " ...\n";

//FTP-Verbindung wird eröffnet,Methode GetFtpConnection wird auf session angewandt, connection wird auf zurückgegeben Zeiger gesetzt
if(connection = session.GetFtpConnection(pstrServer, login, passwd, port, bPassive))
{
cout << "Verbindung wurde aufgebaut";
}
}


Dieser Post wurde am 21.01.2009 um 19:33 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.01.2009, 19:33 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hast vergessen die session zu initialisieren, das musste man glaube ich machen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.01.2009, 20:36 Uhr
wulfgang



Nabend,
initialisiere ich nicht mit:
C++:
CInternetSession session
?
Kannst du dann vielleicht schreiben, was du meinst?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.01.2009, 11:12 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hmm okay stimmt, das muss man gar nicht weiter initialiseren.

Wo genau kommt den die debug-assertion? das zeigt einem der Debugger ja an
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.01.2009, 21:00 Uhr
~wulfgang
Gast


Moin, also ich bin ein Stück weiter gekommen. Der Proxy über den ich den anderen Server erreichen möchte hat aber einen User und ein Kennwort. Beides muss ich wohl setzen. Ich weiß man braucht hierfür die Funktion CInternetSession::SetOption. Ich weiß aber nicht wie man diese Funktion verwendet. habe auch nichts inder Hilfe gefunden.
Mein Vorschlag wäre irgendwie so(ist aber wohl noch falsch):

Code:
SetOption->session( INTERNET_OPTION_PROXY_PASSWORD::"meinPasswort" INTERNET_OPTION_PROXY_USERNAME::"meinUser", dwValue,
dwFlags = 0
);


Kann mir jemand bitte noch ein wenig weiterhelfen bei dieser Funktion, komme sonst wirklich nicht weiter.


Falls es interessiert mein vollständiger Code:

Code:
// KlassenMethodenKonsole.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>


    /////////////////////////////////////////////////////////
    //Block zum Aufbauen der Verbindung
    /////////////////////////////////////////////////////////


    //Bibliotheken für FTP-Session
    #include <afx.h>
    #include <afxwin.h>
    #include <afxinet.h>
    #include <stdio.h>


    int warte;

    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {
        if (!AfxWinInit(::GetModuleHandle(NULL), NULL,
                    ::GetCommandLine(), 0))
    {
        
        return -1;
    }
    
    //Objekt session wird erzeugt
    
     CInternetSession session(_T("My FTP Session",1, INTERNET_OPEN_TYPE_PROXY , "serverftp.corp:21", NULL, 0));  





    //Zeiger auf CFtpConnection
    CFtpConnection *connection;
    
    

    //Deklarationen für GetFtpConnection Member-Funktion
    char servername[100]="beispiel.org";
    LPCTSTR pstrServer;
    pstrServer = (LPCTSTR)servername;
    LPCTSTR login = NULL;
    LPCTSTR passwd = NULL;
    INTERNET_PORT port = 21;
    BOOL bPassive = FALSE;


    cout << "Verbinde mit " << servername << " ...\n";
    
    try
    {

    //FTP-Verbindung wird eröffnet,Methode GetFtpConnection wird auf session angewandt, connection wird auf zurückgegeben Zeiger gesetzt
        if(connection = session.GetFtpConnection(pstrServer, login, passwd, port, bPassive))
            {
            cout << "Verbindung wurde aufgebaut";    
    }
    
    }
    catch (CInternetException* pEx)
    {
        TCHAR sz[1024];
        pEx->GetErrorMessage(sz, 1024);
        printf_s("ERROR!  %S\n", sz);
        pEx->Delete();
     }
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.01.2009, 11:03 Uhr
wulfgang



Morgen,
ich habe mich entschieden das ganze erst einmal ohne Proxy-Server zu versuchen. Der Compiler meckert auch nicht. Ich erhalte trotzdem noch die Meldung das der Servername nicht verarbeitet werden kann.
Liegt das irgendwie vielleicht an dem Casting? Was kann ich da besser machen?

Code:
pstrServer = (LPCTSTR)servername;
      LPCTSTR login = (LPCTSTR)"user";
          LPCTSTR passwd = (LPCTSTR)"password";








Hier mein gesamter Code:

Code:
// KlassenMethodenKonsole.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>


    /////////////////////////////////////////////////////////
    //Block zum Aufbauen der Verbindung
    /////////////////////////////////////////////////////////


    //Bibliotheken für FTP-Session
    #include <afx.h>
    #include <afxwin.h>
    #include <afxinet.h>
    #include <stdio.h>


    int warte;

    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {
        if (!AfxWinInit(::GetModuleHandle(NULL), NULL,
                    ::GetCommandLine(), 0))
    {
        
        return -1;
    }
    
    //Objekt session wird erzeugt
    
     CInternetSession session(_T("My FTP Session",1, INTERNET_OPEN_TYPE_DIRECT));  

//Zeiger auf CFtpConnection
    CFtpConnection *connection;
    
    

    //Deklarationen für GetFtpConnection Member-Funktion
    char servername[100]="beispielserver";
    LPCTSTR pstrServer;
    pstrServer = (LPCTSTR)servername;
    LPCTSTR login = (LPCTSTR)"user";
             LPCTSTR passwd = (LPCTSTR)"password";
             INTERNET_PORT port = 21;
             BOOL bPassive = FALSE;


    cout << "Verbinde mit " << servername << " ...\n";
    
    try
    {

    //FTP-Verbindung wird eröffnet,Methode GetFtpConnection wird auf session    angewandt, connection wird auf zurückgegeben Zeiger gesetzt
        if(connection = session.GetFtpConnection(pstrServer, login, passwd, port, bPassive))
            {
            cout << "Verbindung wurde aufgebaut";    
            }
    
    }
    catch (CInternetException* pEx)
    {
        cout<<"FEHLER : "<<GetLastError()<<endl;
        TCHAR sz[1024];
        pEx->GetErrorMessage(sz, 1024);
        printf_s("ERROR!  %S\n", sz);
        pEx->Delete();
     }
    cin >> warte;
    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.01.2009, 22:25 Uhr
0xdeadbeef
Gott
(Operator)


Denkbar. Wenn du mit _UNICODE kompilierst, ist TCHAR als wchar_t definiert. Das Umcasten der Stringkonstanten hilft dann wenig - schreib

C++:
LPCTSTR login = _T("user");


und analog

C++:
TCHAR servername[100] = _T("beispielserver");



Wenn du den Kram einlesen willst, ich bin nicht sicher, ob Microsoft analog zu den _t*-Funktionen aus der C-Bibliothek auch _tcin, _tcout, _tstring etc. definiert. Falls nicht, könnte es Sinn machen, sich etwas entsprechendes zurechtzulegen.

...oder du kompilierst ohne _UNICODE, dann ist TCHAR char und der ganze Ärger sollte verschwinden.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
26.01.2009, 08:10 Uhr
wulfgang



Guten Morgen,
also ich habe es jetzt ohne Proxy hinbekommen! Danke für die Hilfe
Mit Proxy kriege ich das leider noch nicht hin.
Irgendwas stimmt noch nicht mit meinem: session.SetOption . Der Rückgabewert ist 0 und getLastError sagt:
Zitat:
ERROR_INTERNET_INCORRECT_HANDLE_TYPE
12018 The type of handle supplied is incorrect for this operation.



Code:
bool    abc = false;
         abc = session.SetOption(
         INTERNET_OPTION_PROXY_PASSWORD,
         _T("meinpassword1"),
         _tcslen(_T("meinpassword1")) );
         cout << abc << "\n";
         cout<<"FEHLER : "<<GetLastError()<<endl;


Sieht noch jemand meinen Fehler?
meinpassword1 muss ja vom Typ lpvoid sein, ist das _T vielleicht falsch?
Grüße
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: