Internet-Einwahl, Testen ob Daten fließen, Internet trennen



  • Hallo,

    ich will ein Prog schreiben, dass sich erst einwählt (RasDial), dann alle x Sekunden testen ob Daten fließen, und wenn 30 s keine geflossen sind dann wieder trennt. Hab bis auf die Namen zweier Funktionen keinen Plan wie ichs anstellen könnte. Habs schon mit diversen Codeschnipseln aus dem Forum probiert, ging nie.

    Kann mir jemand nen Tipp geben?

    Danke im voraus.
    Unzi

    P.S.: Mir is es schnuppe, was da für Daten fließen, also nix mit Sniffer.





  • Kann es sein, dass der MSVC++ diese Funktion nicht kennt? Der Code lässt sich mit dem Borland fehlerfrei compilieren.
    Ich benutze die Version 6.0.
    Remote Viewer



  • Also, hallo erstmal,

    RasHangUp ist ein Klacks, wenn man sich erstmal eingewählt hat, denn dafür braucht man nur den Verbindungshandle, den man nur kriegt, wenn man sich einwählt. Lange Rede, kurzer Sinn: Ich muss mich mit RasDial einwählen. Das hier hat nicht geklappt:

    int  Einwahl(char * PhoneNumber,char* UserName,char* Password) 
    { 
      char szBuf[256]; 
      RASDIALPARAMS rdParams; 
      rdParams.dwSize = sizeof(RASDIALPARAMS); 
    
      rdParams.szEntryName[0] = '\0';         //Name unwichtig     
      lstrcpy( rdParams.szPhoneNumber, PhoneNumber ); //Telefon-Nummer      
      rdParams.szCallbackNumber[0] = '\0';        //Rückrufnummer (keine) 
      lstrcpy( rdParams.szUserName, UserName );   //Username        
      lstrcpy( rdParams.szPassword, Password );   //Passwort 
      rdParams.szDomain[0] = '\0';                //Anmeldung  
    
      /* Verbindung aufbauen*/ 
      HRASCONN hRasConn = NULL; 
      DWORD dwRet = RasDial( NULL, NULL, &rdParams, 0L, NULL, &hRasConn ); 
    
      if ( dwRet == 0 )  //Wenn erfolgreich 
      { 
       return 1; 
        // exit(0); 
      } 
      else  //Verbindung Fehlgeschlagen  
       return 0; 
      if ( RasGetErrorString( (UINT)dwRet, (LPSTR)szBuf, 256 ) != 0 ) 
       cout<<(LPSTR)szBuf<< "Undefined RAS Dial Error "<< dwRet; 
       RasHangUp( hRasConn ); 
    
    }
    

    Wie gesagt, ich kenne mich bei der Internet-Einwahl kaum aus und weiß nicht, wo der Fehler liegt.

    Gruß!

    Unzi

    P.S.: Hab MS-VC 6 Autoren-Edition, kennt eine Funktion wirklich nicht(weiß nicht genau welche), obwohls in der MSDN steht 🙄 (tja, Micro$oft, man braucht halt erst die Professional-Edition), hab aber auch Borland BCC55, der kennt das.



  • Ein Platform-SDK-Update sollte auch helfen!
    Was kommt für ein Fehler? (GetLastError)



  • VOID WINAPI MyRasDialFunc(
      UINT unMsg,    // type of event that has occurred
      RASCONNSTATE rasconnstate,
                     // connection state about to be entered
      DWORD dwError  // error that may have occurred
    )
    {
    }
    
    int  Einwahl(char * PhoneNumber,char* UserName,char* Password)  
    {  
      char szBuf[256];  
      RASDIALPARAMS rdParams;  
      rdParams.dwSize = sizeof(RASDIALPARAMS);  
    
      lstrcpy( rdParams.szEntryName, "");         //Name unwichtig      
      lstrcpy( rdParams.szPhoneNumber, PhoneNumber ); //Telefon-Nummer       
      lstrcpy( rdParams.szCallbackNumber, "");        //Rückrufnummer (keine)  
      lstrcpy( rdParams.szUserName, UserName );   //Username         
      lstrcpy( rdParams.szPassword, Password );   //Passwort  
      lstrcpy( rdParams.szDomain, "");                //Anmeldung
      rdParams.dwSubEntry = 0;
      rdParams.dwCallbackId = 0;
    
      /* Verbindung aufbauen*/  
      HRASCONN hRasConn = 0;  
      DWORD dwRet = RasDial( NULL, NULL, &rdParams, 0, MyRasDialFunc, &hRasConn );  
      char zahl[10];
      if ( dwRet == 0 )  //Wenn erfolgreich  
      {  
    	  RasHangUp( hRasConn );  
    	  return 1;  
        // exit(0);  
      }  
      else
      {
    		itoa(GetLastError(),zahl,10);
    		MessageBox(0,zahl,"Error no.",0);
      }
      RasGetErrorString( (UINT)dwRet, (LPSTR)szBuf, 256 );
      	  char errOut[100];
    	  lstrcpy(errOut,(LPCTSTR)szBuf);
    	  lstrcat(errOut,"Undefined RAS Dial Error ");
    	  itoa(dwRet,zahl,10);
    	  lstrcat(errOut,zahl);
    	  MessageBox(0,errOut,"RasDialError",0);
    }
    

    GetLastError: Der Paramter ist ungültig.
    RasGetErrorString: Der Puffer ist ungültig.

    Unzi



  • Hast du WINVER als einen Wert >= 0x401 definiert?
    Lass mal die Callbackfunktion weg. Also dann so:

    HRASCONN hRasConn = NULL;
    // evtl. auch so: HRASCONN hRasConn = {0};
    DWORD dwRet = RasDial( NULL, NULL, &rdParams, NULL, NULL, &hRasConn );
    


  • Meinst du, dass ich 95/98/ME habe? Naja, geht trotzdem nicht. Selber Fehler.



  • 'N Blick in die Newsgroups ist immer gut:

    There is probability, that under 95/98 the size of structure
    might be wrong ( if you use sizeof(RASDIALPARAMS)

    Under Winnt/2000 sizeof(RASDIALPARAMS) works well but
    under 95/98 i figured out that dwSize = 1052 works just fine.....

    And I did it, and it worked fine 😃

    Gruß!
    Unzi



  • Hmm, mist! Da freu ich mich nun das was geklappt hat, und was seh ich in der MSDN: RasClearConnectionStatistics ist erst ab Windows XP und ich hab Windows 98 😡 😡 😡 . Kennt jemand eine derartige Funktion auch fürs uralte Windows 98?

    Danke im voraus!

    Unzi

    P.S.: Fang aufgrund des neuen Problems nen neuen Thread an.


Anmelden zum Antworten