Announcement

Collapse
No announcement yet.

DFÜ Wählprogramm?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DFÜ Wählprogramm?

    Hallo! Ich möchte ein Wählprogramm entwickeln, das eine ganze Liste von Nummern ab"klappert" und eine freie Nummer anwählt. Ich weiß nur nicht, wie ich einen Inet Verbindung mit Delphi herstellen kann. Brauche ich da irgendwelche Komponenten?

    Ich hoffe, ihr könnt mir helfen ;-)

  • #2
    Für eine Einwahl und das Prüfen einer aktiven Internetverbindung habe ich schon etliche Quellcodes und Beispiele gefunden aber leider habe auch ich immer wieder feststellen müssen, dass das meiste nicht funktioniert.

    Z.b. kann ich einen Einwahldialog öffnen. Der ist aber oft sinnlos, wenn z.B. eine Verbindung über einen Router existiert. Wie kann man das aber abprüfen? Wenn ich die Beispiele aus der Unit "Inet" nutze, erhalte ich immer das Ergebnis, dass eine Verbindung existiert, auch wenn der Rechner offline ist.

    Wie z.B. Outlook Express erkennt, dass eine Verbindung existiert, noch hergestellt werden muss oder am Ende wieder geschlossen werden kann, ist mir trotz stundlanger Recherchen und noch längeren Testphasen unklar

    Comment


    • #3
      Hallo,<br>
      ich hoffe, dass ich dich richtig verstanden habe. Ich hatte für ein ähnliches Problem mal einen Script geschrieben...<br>Schau dir den Code mal an, evtl hilft es dir weiter.<br><br>
      @ECHO oFF
      ECHO *****************************************
      ECHO *** UEBERTRAGUNG EINES TESTDOKUMENTES ***
      ECHO *** mit Fallback auf ISDN-Leitung ***
      ECHO *****************************************
      ECHO .
      ECHO Bitte warten, die Datenuebertragung wird ausgefuehrt...
      ECHO (Fenster schliesst sich nach Beendigung automatisch!)
      ECHO .

      REM Variablen Definition
      SET LOG=LOG.TXT
      SET ERR=ERROR.txt
      SET DATEI=Test.txt
      SET HELP=
      REM ****************
      REM *** ORT 1 ***
      REM ****************
      SET ORT_1=[Freitext Name der Verbindung]
      SET VPN_1=[In Netzwerkumgebung eingerichtete VPN Verbindung]
      SET ISDN_1=[In Netzwerkumgebung eingerichtete ISDN Verbindung]
      SET NUTZER_1=[Anmeldename]
      SET PASS_1=[Anmeldepasswort]
      SET PFAD_1=[Pfad für Dateiübertragung]
      REM ****************
      REM *** ORT 2 ***
      REM ****************
      SET ORT_2=
      SET VPN_2=
      SET ISDN_2=
      SET NUTZER_2=
      SET PASS_2=
      SET PFAD_2=
      REM ****************
      REM *** ORT 3 ***
      REM ****************
      SET ORT_3=
      SET VPN_3=
      SET ISDN_3=
      SET NUTZER_3=
      SET PASS_3=
      SET PFAD_3=
      REM ****************
      REM *** ORT 4 ***
      REM ****************
      SET ORT_4=
      SET VPN_4=
      SET ISDN_4=
      SET NUTZER_4=
      SET PASS_4=
      SET PFAD_4=
      REM Ende Variablen

      REM DATUM und ZEIT ausgeben
      ECHO ************************************************** *********** >> %LOG%
      ECHO *** Uebertragungsprotokoll von %DATE% %TIME% *** >> %LOG%
      ECHO ************************************************** *********** >> %LOG%

      REM *** STUDIO 1 Uebertragung ***
      ECHO ------------------------------ >> %LOG%
      ECHO -- Dateiuebertragung zu %ORT_1% -- >> %LOG%
      rasdial %VPN_1% /disconnect
      rasdial %VPN_1% %NUTZER_1% %PASS_1%
      if %ERRORLEVEL%==0 (
      ECHO %ORT_1% ueber VPN verbunden. >> %LOG%
      copy /Y %DATEI% %PFAD_1% >> %LOG%
      rasdial %VPN_1% /disconnect
      if %ERRORLEVEL%==0 (
      ECHO %VPN_1% getrennt. >> %LOG%
      ) ELSE ( ECHO Trennung von %VPN_1% fehlgeschlagen! )
      ) ELSE (
      ECHO %ORT_1% ueber VPN fehlgeschlagen! >> %LOG%
      rasdial %ISDN_1% /disconnect
      rasdial %ISDN_1% %NUTZER_1% %PASS_1%
      if %ERRORLEVEL%==0 (
      ECHO %ORT_1% ueber ISDN verbunden. >> %LOG%
      copy /Y %DATEI% %PFAD_1% >> %LOG%
      rasdial %ISDN_1% /disconnect
      if %ERRORLEVEL%==0 (
      ECHO %VPN_1% getrennt. >> %LOG%
      ) ELSE ( ECHO Trennung von %ISDN_1% fehlgeschlagen! )
      ) ELSE ( ECHO %ORT_1% ueber ISDN fehlgeschlagen! >> %LOG% )
      )

      REM *** STUDIO 2 Uebertragung ***
      ECHO ------------------------------ >> %LOG%
      ECHO -- Dateiuebertragung zu %ORT_2% -- >> %LOG%
      rasdial %VPN_2% /disconnect
      rasdial %VPN_2% %NUTZER_2% %PASS_2%
      if %ERRORLEVEL%==0 (
      ECHO %ORT_2% ueber VPN verbunden. >> %LOG%
      copy /Y %DATEI% %PFAD_2% >> %LOG%
      rasdial %VPN_2% /disconnect
      if %ERRORLEVEL%==0 (
      ECHO %VPN_2% getrennt. >> %LOG%
      ) ELSE ( ECHO Trennung von %VPN_2% fehlgeschlagen! )
      ) ELSE (
      ECHO %ORT_2% ueber VPN fehlgeschlagen! >> %LOG%
      rasdial %ISDN_2% /disconnect
      rasdial %ISDN_2% %NUTZER_2% %PASS_2%
      if %ERRORLEVEL%==0 (
      ECHO %ORT_2% ueber ISDN verbunden. >> %LOG%
      copy /Y %DATEI% %PFAD_2% >> %LOG%
      rasdial %ISDN_2% /disconnect
      if %ERRORLEVEL%==0 (
      ECHO %VPN_2% getrennt. >> %LOG%
      ) ELSE ( ECHO Trennung von %ISDN_2% fehlgeschlagen! )
      ) ELSE ( ECHO %ORT_2% ueber ISDN fehlgeschlagen! >> %LOG% )
      )

      REM *** STUDIO 3 Uebertragung ***
      ECHO ------------------------------ >> %LOG%
      ECHO -- Dateiuebertragung zu %ORT_3% -- >> %LOG%
      rasdial %VPN_3% /disconnect
      rasdial %VPN_3% %NUTZER_3% %PASS_3%
      if %ERRORLEVEL%==0 (
      ECHO %ORT_3% ueber VPN verbunden. >> %LOG%
      copy /Y %DATEI% %PFAD_3% >> %LOG%
      rasdial %VPN_3% /disconnect
      if %ERRORLEVEL%==0 (
      ECHO %VPN_3% getrennt. >> %LOG%
      ) ELSE ( ECHO Trennung von %VPN_3% fehlgeschlagen! )
      ) ELSE (
      ECHO %ORT_3% ueber VPN fehlgeschlagen! >> %LOG%
      rasdial %ISDN_3% /disconnect
      rasdial %ISDN_3% %NUTZER_3% %PASS_3%
      if %ERRORLEVEL%==0 (
      ECHO %ORT_3% ueber ISDN verbunden. >> %LOG%
      copy /Y %DATEI% %PFAD_3% >> %LOG%
      rasdial %ISDN_3% /disconnect
      if %ERRORLEVEL%==0 (
      ECHO %VPN_3% getrennt. >> %LOG%
      ) ELSE ( ECHO Trennung von %ISDN_3% fehlgeschlagen! )
      ) ELSE ( ECHO %ORT_3% ueber ISDN fehlgeschlagen! >> %LOG% )
      )

      REM *** STUDIO 4 Uebertragung ***
      ECHO ------------------------------ >> %LOG%
      ECHO -- Dateiuebertragung zu %ORT_4% -- >> %LOG%
      rasdial %VPN_4% /disconnect
      rasdial %VPN_4% %NUTZER_4% %PASS_4%
      if %ERRORLEVEL%==0 (
      ECHO %ORT_4% ueber VPN verbunden. >> %LOG%
      copy /Y %DATEI% %PFAD_4% >> %LOG%
      rasdial %VPN_4% /disconnect
      if %ERRORLEVEL%==0 (
      ECHO %VPN_4% getrennt. >> %LOG%
      ) ELSE ( ECHO Trennung von %VPN_4% fehlgeschlagen! )
      ) ELSE (
      ECHO %ORT_4% ueber VPN fehlgeschlagen! >> %LOG%
      rasdial %ISDN_4% /disconnect
      rasdial %ISDN_4% %NUTZER_4% %PASS_4%
      if %ERRORLEVEL%==0 (
      ECHO %ORT_4% ueber ISDN verbunden. >> %LOG%
      copy /Y %DATEI% %PFAD_4% >> %LOG%
      rasdial %ISDN_4% /disconnect
      if %ERRORLEVEL%==0 (
      ECHO %VPN_4% getrennt. >> %LOG%
      ) ELSE ( ECHO Trennung von %ISDN_4% fehlgeschlagen! )
      ) ELSE ( ECHO %ORT_4% ueber ISDN fehlgeschlagen! >> %LOG% )
      )

      <br><br>ich habe das jetzt einfach mal hier rein kopiert... :-)wenn du nicht zurecht kommst, mail mich kurz an, dann schick ich dir es zu.. <br><br>[email protected]<br>cu Michae

      Comment


      • #4
        Hallo zusammen,
        ich denke, ich habe auf die Fragen von Willi und Frank die Antwort, leider jedoch nur in C++Builder Code. Entscheidend ist aber die richtige Verwendung der Windows RAS-Funktionen. Dahingehend ist der Quelltext recht überschaubar und in Delphi leicht nachzuprogrammieren. Ansonsten ist alles da, z.B. Ermittlung der aktiven Verbindungen oder Ermittlung der möglichen Verbindungen zum "abklappern". Selbstverständlich benötigt man keine RAS-Einwahl wenn ein Proxy oder Gatway vorhanden ist. Deshalb habe ich die Art der Verbindung via INI-File bzw. Registry konfigurierbar gemacht.

        Hier der Quelltext einer MainForm mit einer Memo-Komponente, einem großen Textfeld und vier Buttons. Sollte es Probleme geben, bitte eine kurze Mail, dann schicke ich Euch das komplette C++Builder Projekt.

        <PRE>
        //---------------------------------------------------------------------------
        //
        // Copyright (c) 2004 ApusWare Consulting & Softwareengineering
        // Roland Leidinger
        // Alle Rechte vorbehalten.
        //
        #include <vcl.h>
        #include <rasdlg.h>
        #pragma hdrstop

        #include "frmMain.h"

        #pragma package(smart_init)
        #pragma resource "*.dfm"

        /*--------------------------------------------------------------------------
        //
        // HINWEIS: Zur Ermittlung der aktiven DFÜ-Verbindungen gibt es die System-
        // Funktion 'RasEnumConnections'. Diese Funktion erwartet im ersten
        // Parameter den Pointer auf ein Array von Strukturen des Typs
        // RASCONN. Diese Struktur ist in ras.h wie folgt definiert:

        #define RASCONNA struct tagRASCONNA
        RASCONNA
        {
        DWORD dwSize;
        HRASCONN hrasconn;
        CHAR szEntryName[ RAS_MaxEntryName + 1 ];

        #if (WINVER >= 0x400)
        CHAR szDeviceType[ RAS_MaxDeviceType + 1 ];
        CHAR szDeviceName[ RAS_MaxDeviceName + 1 ];
        #endif
        #if (WINVER >= 0x401)
        CHAR szPhonebook [ MAX_PATH ];
        DWORD dwSubEntry;
        #endif
        #if (WINVER >= 0x500)
        GUID guidEntry;
        #endif
        #if (WINVER >= 0x501)
        DWORD dwFlags;
        LUID luid;
        #endif
        };

        // Unter Windows 2000 SP4 besteht die Struktur auch aus den Elementen,
        // die innerhalb der Compilerdirektiven (WINVER >= 0x401),
        // (WINVER >= 0x500) und (WINVER >= 0x501) stehen. Wird das Array
        // mit dieser Struktur erzeugt, kehrt die Funktion 'RasEnumConnections'
        // mit der Fehler Nr. 632 (ERROR_INVALID_SIZE, An incorrect structure
        // size was detected) zurueck.
        //
        // Aus diesem Grund war es erforderlich, zumindest fuer unser OS
        // Windows 2000 SP4 eine eigene RASCONN Struktur zu definieren
        // (siehe unten).
        //
        // Sollte die Funktion mit dieser Struktur auf Ihrem OS mit einem
        // Fehler zurueckkehren, probieren Sie es bitte mit der Original-
        // Struktur.
        //
        //-------------------------------------------------------------------------*/

        // ACHTUNG: Eigene RASCONN Struktur
        //
        #define MYRASCONN struct tagMYRASCONN
        MYRASCONN
        {
        DWORD dwSize;
        HRASCONN hrasconn;
        CHAR szEntryName[ RAS_MaxEntryName + 1 ];

        #if (WINVER >= 0x400)
        CHAR szDeviceType[ RAS_MaxDeviceType + 1 ];
        CHAR szDeviceName[ RAS_MaxDeviceName + 1 ];
        #endif
        };

        #define LPMYRASCONN MYRASCONN*

        // Eine beliebige Internet-Adresse
        #define ANY_URL "http://www.google.de"

        // Legen Sie hier den Namen des DFÜ-Objekts fest, das Sie verwenden moechten
        // Installierte DFÜ-Objekte findet man unter Netzwerkumgebung/Eigenschaften
        #define ANY_DFU "AnyDFÜ"

        // Definieren Sie hier Ihren Usernamen,
        // den Sie von Ihrem Provider erhalten haben
        #define USER_NAME "UserName"

        // Definieren Sie hier Ihren Passwort, dass Sie von Ihrem Provider erhalten
        // haben, oder bei Ihrem Provider selbst eingerichtet haben
        #define PASS_WORD "PassWord"

        TForm1 *Form1;
        static HRASCONN h = NULL;

        __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
        {
        Label1->Caption = "Dieses kleine Demo zeigt, wie man aus einer C++ Builder "
        "Anwendung heraus auf die RAS Dienste von Windows "
        "zugreifen und eine DFÜ-Verbindung herstellen kann. "
        "Wenn eine DFÜ-Verbindung hergestellt werden konnte, "
        "wird mit einer TClientSocket Komponente eine HTML "
        "Verbindung in das Internet, z.B. Google, aufgebaut.\n\r"
        "\n\rSie sollten jetzt unten in dem Memofeld wenigstens "
        "ein DFÜ-Objekt, nämlich das für Ihren Internet-Zugang "
        "sehen. Wenn nicht müssen Sie zuerst noch ein DFÜ-Objekt "
        "erstellen. Klicken Sie hierzu einfach auf die "
        "Schaltfläche 'Aus DFÜ-Liste auswählen' und klicken Sie "
        "dann auf 'Neu...'. Es erscheint der "
        "Netzwerkverbindungs-Assistent.\n\r"
        "\n\rDamit alle Varianten funktionieren, "
        "müssen Sie im Quellcode den Macros ANY_DFU, USER_NAME "
        "und PASS_WORD Ihre Daten zuweisen.";

        FRASEntryCount = 0;
        // Anzahl installierter DFÜ-Objekte ermitteln
        GetRASEntryCount();
        FindConnection = false;
        }

        //---------------------------------------------------------------------------
        //
        // Wir ermitteln die Anzahl der im System installierten DFU-Objekte, Die
        // Anzahl der DFÜ-Objekte wird zum Erhalt der aktiven Verbindungen benoetigt,
        //
        // Zur Demonstration geben wir die Namen aller DFU-Objekte aus.
        //
        void __fastcall TForm1::GetRASEntryCount( void )
        {
        RASENTRYNAME entryNames;
        LPRASENTRYNAME pEntryNames;
        DWORD bufSize, entries;

        // Wir ermitteln hier nur die Anzahl der DFU-Objekte
        memset( &entryNames, 0, sizeof(RASENTRYNAME) );
        entryNames.dwSize = sizeof(RASENTRYNAME);
        bufSize = sizeof(RASENTRYNAME);
        RasEnumEntries( NULL, NULL, &entryNames, &bufSize, &entries );
        // Die Anzahl wird ueber bufSize zurueckgeliefert
        FRASEntryCount = bufSize / sizeof(RASENTRYNAME);

        // Wollen wir alle DFU-Objekte einlesen, geht das so:
        //
        // Array von RASENTRYNAME Strukturen erzeugen mit FRASEntryCount Elementen
        pEntryNames = new RASENTRYNAME[FRASEntryCount];
        // Im ersten Element die Groesse einer RASENTRYNAME-Struktur eintragen
        pEntryNames[0].dwSize = sizeof(RASENTRYNAME);
        // Groesse des gesamten Arrays ermitteln
        bufSize = sizeof(RASENTRYNAME) * FRASEntryCount;
        // DFU-Objekte abrufen
        RasEnumEntries( NULL, NULL, pEntryNames, &bufSize, &entries );
        // Namen aller vorhandenen DFU-Objekte ausgeben
        for( unsigned int i = 0; i < entries; i++ )
        Memo1->Lines->Add( String(pEntryNames[i].szEntryName) );

        delete[] pEntryNames;
        }

        //---------------------------------------------------------------------------
        //
        // Verbindung via DFÜ DialIn-Dialog mit vorgeschaltetem Auswahl-Dialog
        // aus DFÜ's herstellen
        //
        // Zur Trennung einer mit den Systemdialogen aufgebauten Verbindung mit
        // der System-Funktion 'RasHangUp', muessen zuerst vom System die aktiven
        // Verbindungen angefordert werden, weil die Funktion 'RasHangUp' den
        // Handle (Typ HRASCONN) der zu trennenden Verbindung benoetigt.
        //
        void __fastcall TForm1::Button1Click(TObject *Sender)
        {
        RASPBDLG cfg;

        // DFÜ DialIn-Dialog mit vorgeschaltetem Auswahl-Dialog aus DFÜ's
        memset( &cfg, 0, sizeof(RASPBDLG) );
        cfg.dwSize = sizeof(RASPBDLG);
        cfg.hwndOwner = Handle;

        if ( RasPhonebookDlg( NULL, NULL, &cfg ) != 0 )
        {
        Memo1->Clear();
        FindConnection = true;
        Button2->Enabled = true;

        // Jetzt eine Socket Verbindung z.B. zum Google HTTP Server aufbauen
        // Nur zu Demo Zwecken
        ClientSocket1->Address = ANY_URL;
        ClientSocket1->Port = 80;
        ClientSocket1->Active = true;
        }
        }

        //---------------------------------------------------------------------------
        //
        // Verbindung via DFÜ DialIn-Dialog OHNE vorgeschaltetem Auswahl-Dialog
        // aus DFÜ's herstellen.
        //
        // Zur Trennung einer mit den Systemdialogen aufgebauten Verbindung mit
        // der System-Funktion 'RasHangUp', muessen zuerst vom System die aktiven
        // Verbindungen angefordert werden, weil die Funktion 'RasHangUp' den
        // Handle (Typ HRASCONN) der zu trennenden Verbindung benoetigt.
        //
        void __fastcall TForm1::Button3Click(TObject *Sender)
        {
        RASDIALDLG cfg;

        // DFÜ DialIn-Dialog OHNE vorgeschaltete Auswahl-Dialog aus DFÜ's
        memset( &cfg, 0, sizeof(RASDIALDLG) );
        cfg.dwSize = sizeof(RASDIALDLG);
        cfg.hwndOwner = Handle;

        if ( RasDialDlg( NULL, ANY_DFU, NULL, &cfg ) != 0 )
        {
        Memo1->Clear();
        FindConnection = true;
        Button2->Enabled = true;

        // Jetzt eine Socket Verbindung z.B. zum Google HTTP Server aufbauen
        // Nur zu Demo Zwecken
        ClientSocket1->Address = ANY_URL;
        ClientSocket1->Port = 80;
        ClientSocket1->Active = true;
        }
        }

        //---------------------------------------------------------------------------
        //
        // RAS Verbindungsaufbau ohne DialIn Dialoge.
        //
        // Zur Trennung dieser Verbindung muessen nicht zuerst die aktiven Verbindungen
        // vom System angefordert werden, weil die System-Funktion 'RasDial' den
        // Handle (Typ HRASCONN) bei erfolgreicher Verbindung zurueck liefert, den
        // wir fuer die Funktion 'RasHangUp' benoetigen.
        //
        void __fastcall TForm1::Button4Click(TObject *Sender)
        {
        RASDIALPARAMS params;
        RASCONNSTATUS stat;

        FindConnection = false;
        Memo1->Clear();

        // RAS Verbindungsaufbau ohne DialIn Dialoge
        memset( &params, 0, sizeof(RASDIALPARAMS) );
        params.dw

        Comment


        • #5
          Leider passte nicht alles in Post #3 hinein. Deshalb hier die Fortsetzung:

          <PRE>
          //---------------------------------------------------------------------------
          //
          // RAS Verbindungsaufbau ohne DialIn Dialoge.
          //
          // Zur Trennung dieser Verbindung muessen nicht zuerst die aktiven Verbindungen
          // vom System angefordert werden, weil die System-Funktion 'RasDial' den
          // Handle (Typ HRASCONN) bei erfolgreicher Verbindung zurueck liefert, den
          // wir fuer die Funktion 'RasHangUp' benoetigen.
          //
          void __fastcall TForm1::Button4Click(TObject *Sender)
          {
          RASDIALPARAMS params;
          RASCONNSTATUS stat;

          FindConnection = false;
          Memo1->Clear();

          // RAS Verbindungsaufbau ohne DialIn Dialoge
          memset( &params, 0, sizeof(RASDIALPARAMS) );
          params.dwSize = sizeof(RASDIALPARAMS);
          strcpy( params.szEntryName, ANY_DFU );
          strcpy( params.szUserName, USER_NAME );
          strcpy( params.szPassword, PASS_WORD );

          h = NULL;
          // Verbindung aufbauen
          if ( RasDial( NULL, NULL, &params, 0, NULL, &h ) != 0 )
          {
          if ( h != NULL )
          RasHangUp(h);

          Memo1->Lines->Add( "Fehler beim Aufbei der DFÜ Verbindung." );
          }
          else
          {
          // Status der aktiven Verbindung ermitteln
          memset( &stat, 0, sizeof(RASCONNSTATUS) );
          stat.dwSize = sizeof(RASCONNSTATUS);
          RasGetConnectStatus( h, &stat );
          if ( stat.rasconnstate == RASCS_Connected )
          {
          Memo1->Lines->Add( "DFÜ Verbindung hergestellt." );
          Button2->Enabled = true;

          // Jetzt eine Socket Verbindung zum HTTP Server aufbauen
          // z.B. zu Google. Nur zu Demo Zwecken
          ClientSocket1->Address = ANY_URL;
          ClientSocket1->Port = 80;
          ClientSocket1->Active = true;
          }
          else
          Memo1->Lines->Add( "DFÜ Verbindung unterbrochen." );

          // Einige zusaetzlichen Info's zu Verbindung ausgeben
          Memo1->Lines->Add( String(stat.szDeviceType) );
          Memo1->Lines->Add( String(stat.szDeviceName) );
          }
          }

          //---------------------------------------------------------------------------
          //
          //
          void __fastcall TForm1::Button2Click(TObject *Sender)
          {
          RASCONNSTATUS stat;

          // Socket Verbindung trennen
          ClientSocket1->Active = false;

          // Bei Herstellung einer DFÜ-Verbindung mittels System-Dialogen
          // mueesen wir den Handle der aktiven Verbindung ermitteln
          if ( FindConnection == true )
          {
          LPMYRASCONN pRasConn;
          DWORD bufSize, connections = 0;

          // Hier Verwendung der eigenen RASCONN Struktur
          pRasConn = new MYRASCONN[FRASEntryCount];
          memset( pRasConn, 0, sizeof(MYRASCONN) * FRASEntryCount );
          bufSize = sizeof(MYRASCONN) * FRASEntryCount;
          pRasConn[0].dwSize = sizeof(MYRASCONN);

          // Aktive Verbindungen ermitteln
          if ( RasEnumConnections( (LPRASCONN)pRasConn,
          &bufSize, &connections ) == 0 )
          // Handle nur von der ersten aktiven Verbindung soll
          // fuer Demozwecke ausreichen
          h = pRasConn[0].hrasconn;
          else
          h = NULL;

          delete[] pRasConn;
          }

          // Verbindung trennen
          if ( RasHangUp(h) == 0 )
          {
          // Diese do while Schleife sollte mit einem Timer ueberwacht
          // werden, damit keine Endloschleife entstehen kann
          do {
          Sleep(1);
          memset( &stat, 0, sizeof(RASCONNSTATUS) );
          stat.dwSize = sizeof(RASCONNSTATUS);
          // Status erfragen und warten, bis Verbindung getrennt ist
          RasGetConnectStatus( h, &stat );
          } while( stat.rasconnstate == RASCS_Connected );

          Memo1->Lines->Add( "DFÜ Verbindung beendet." );
          }

          Button2->Enabled = false;
          }

          //---------------------------------------------------------------------------
          //
          //
          void __fastcall TForm1::ClientSocket1Connecting(TObject *Sender,
          TCustomWinSocket *Socket)
          {
          Memo1->Lines->Add( "Verbindung zu " +
          String(ANY_URL) + " (HTTP) hergestellt!");
          }

          //---------------------------------------------------------------------------
          //
          //
          void __fastcall TForm1::ClientSocket1Lookup(TObject *Sender,
          TCustomWinSocket *Socket)
          {
          Memo1->Lines->Add( "Suche Host " + String(ANY_URL) );
          }

          //---------------------------------------------------------------------------
          //
          //
          void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
          TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
          {
          String error;

          switch( ErrorEvent )
          {
          case eeGeneral:
          error = "eeGeneral";
          break;
          case eeSend:
          error = "eeSend";
          break;
          case eeReceive:
          error = "eeReceive";
          break;
          case eeConnect:
          error = "eeConnect";
          break;
          case eeDisconnect:
          error = "eeDisconnect";
          break;
          case eeAccept:
          error = "eeAccept";
          break;
          default:
          error = "unbekannt";
          }

          Memo1->Lines->Add( "Socket Meldung: " + error );
          ErrorCode = 0;
          }

          //---------------------------------------------------------------------------
          //
          //
          void __fastcall TForm1::ClientSocket1Disconnect(TObject *Sender,
          TCustomWinSocket *Socket)
          {
          Memo1->Lines->Add( "Verbindung zu " + String(ANY_URL) + " (HTTP) getrennt!");
          }

          </PRE&gt

          Comment

          Working...
          X