Postat: 11 december 2007, 19:44:57
Hej!
Sååja, nu har man kodat klart!
Färdiga scriptet finns att hitta här nedan, med BRA kommenterad källkod.
Det fungerar såhär att varje 60sekunder så pollar den anslutning, dvs försöker ansluta en socket till www.google.se (ip).
Lyckas detta inte, så antas anslutningen vara "död" och då disconnectar scriptet den, samt ansluter igen.
Detta loopas oändligt antal gånger, till användaren stänger programmet eller använder CTRL+C för att bryta.
Programmet som styr anslutningen till PPP modemet/tre modemet heter "rasdial.exe" och finns med i Vista samt XP.
Färgkodad källkod finns på:
Nedan följer källkoden i plaintext:
Scriptet funkar att kompilera direkt i Dev-C++, dock måste man inkludera libwsock32.a i projektinställningarna.
Nedan följer hela projektmappen för Dev-C++ (Ink projekt filer)
http://dump.jine.se/index.php?folder=cmVkaWFs
Hoppas nån mer än jag har nytta för programmet iaf =)
mvh Jim
Sååja, nu har man kodat klart!
Färdiga scriptet finns att hitta här nedan, med BRA kommenterad källkod.
Det fungerar såhär att varje 60sekunder så pollar den anslutning, dvs försöker ansluta en socket till www.google.se (ip).
Lyckas detta inte, så antas anslutningen vara "död" och då disconnectar scriptet den, samt ansluter igen.
Detta loopas oändligt antal gånger, till användaren stänger programmet eller använder CTRL+C för att bryta.
Programmet som styr anslutningen till PPP modemet/tre modemet heter "rasdial.exe" och finns med i Vista samt XP.
Färgkodad källkod finns på:
Nedan följer källkoden i plaintext:
Kod: Markera allt
/*
**********************************************
* Redial program - (C) Jim Nelin 2007-2008
* Optimazed for "Tre"/3Bredband.
*
* Version 1.0a
* Released under GPL License
* - Please feel free to modify! -
*
* Notes:
* You MUST include libwsock32.a in
* Dev-C++ or similar!
*
**********************************************
*/
#include <winsock2.h>
#include <iostream>
using namespace std;
// Port - Använder http port 80 som default
int gPort = 80;
// IPt till valfri webserver. Jag valde google.se
char *gIp = "72.14.221.104";
// Framtida variabel för modemnamnet. (Not used atm!)
char *gName = "3USBModem";
// Fake variabel för loopning
int i = 1;
int main()
{
SOCKET lhSocket;
SOCKADDR_IN lSockAddr;
WSADATA wsaData;
int lConnect;
if(WSAStartup(MAKEWORD(2,0),&wsaData) != 0)
{
cout<<"Socket Initialization Error. Program aborted\n";
// Retunera 0 för att stoppa programmet vid socket fel.
return 0;
}
// Loopa föralltid.
while(i=1)
{
// Skapa socket samt testa så den är aktiv.
lhSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(lhSocket == INVALID_SOCKET)
{
cout<<"Invalid Socket "<<GetLastError()<<". Program Aborted\n"<<endl;
// Retunera 0 för att stoppa programmet vid socket fel.
return 0;
}
memset(&lSockAddr,0, sizeof(lSockAddr));
// Sätt socket inställningar, samt port & ip.
lSockAddr.sin_family = AF_INET;
lSockAddr.sin_port = htons(gPort);
lSockAddr.sin_addr.s_addr = inet_addr(gIp);
// OM det INTE går att ansluta till ip:port...
if(connect(lhSocket,(SOCKADDR *)&lSockAddr,sizeof(SOCKADDR_IN)) != 0)
{
// Kör extern program för att disconnecta helt.
system("rasdial 3USBModem /disconnect");
// Låt modemet svalna 2sek
Sleep(2000);
// Anslut!
system("rasdial 3USBModem");
}
// Clear screen.
system("cls");
// Vänta 60sek och doit again!
Sleep(60000);
// Döda socketen.
closesocket(lhSocket);
} // LOOP!
}
Nedan följer hela projektmappen för Dev-C++ (Ink projekt filer)
http://dump.jine.se/index.php?folder=cmVkaWFs
Hoppas nån mer än jag har nytta för programmet iaf =)
mvh Jim