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.
UnziP.S.: Mir is es schnuppe, was da für Daten fließen, also nix mit Sniffer.
-
RasGetConnectionStatistics
evtl. RasClearConnectionStatistics
RasHangUpZeig mal deine Versuche
-
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.