c语言软件断开重连功能,用c语言实现后台运行的、每隔30s检查一次的、带有日志功能的断网重新连接程序...

//参考链接//C\C++控制台程序隐藏方法总结https://blog.csdn.net/lynch0571/article/details/33320551

//取消提醒《 Win10你要允许此应用对你的电脑进行更改吗 》http://www.w10zj.com/Win10xy/Win10yh_1623.html/*这是一个后台运行的、每隔60s检查一次的、带有日志功能的断网重新连接程序。

早上0到6点,不执行断网重连和写日志功能,只有连续6次ping测试都失败了才会启动联网程序

要想使用它必须要配置好c语言环境,比如安装有mingw的codeblocks,vs不能后台运行,只能在codeblocks中实现后台

实现的方式就是每隔一段时间就去ping一下百度,如果ping失败了就启动上网程序,上网程序会自动连接网络。

使用时将该软件加入开机自启软件即可*/

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) //加上后可以后台运行#include#include#include#include#include#include#include#ifdef WIN32

#include

#else#include //linux下头文件

#endif#include

#define FILE_MAX_SIZE (1024*1024)//日志文件最大为1M

using namespacestd;/*获得当前时间字符串

@param buffer [out]: 时间字符串

@return 空*/

void get_local_time(char*buffer)

{

time_t rawtime;struct tm*timeinfo;

time(&rawtime);

timeinfo= localtime(&rawtime);

sprintf(buffer,"%04d-%02d-%02d %02d:%02d:%02d",

(timeinfo->tm_year + 1900), timeinfo->tm_mon + 1, timeinfo->tm_mday,

timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);

}/*获得日志文件大小

@param filename [in]: 文件名

@return 文件大小*/

long get_file_size(char*filename)

{long length = 0;

FILE*fp =NULL;

fp= fopen(filename, "rb");if (fp !=NULL)

{

fseek(fp,0, SEEK_END);

length=ftell(fp);

}if (fp !=NULL)

{

fclose(fp);

fp=NULL;

}returnlength;

}/*写入日志文件

@param filename [in]: 日志文件名

@param max_size [in]: 日志文件大小限制

@param buffer [in]: 日志内容

@param buf_size [in]: 日志内容大小

@return 空*/

void write_log_file(char* filename, long max_size, char*buffer, unsigned buf_size)

{if (filename != NULL && buffer !=NULL)

{//文件超过最大限制, 删除

long length =get_file_size(filename);if (length >max_size)

{

unlink(filename);//删除文件

}//写日志

{

FILE*fp;

fp= fopen(filename, "at+");if (fp !=NULL)

{char now[32];

memset(now,0, sizeof(now));

get_local_time(now);

fwrite(now, strlen(now)+ 1, 1, fp);

fwrite(buffer, buf_size,1, fp);

fclose(fp);

fp=NULL;

}

}

}

}/*后台运行的、每隔60s检查一次的、带有日志功能的断网重新连接程序*/

voidp()

{//隐藏窗口

HWND hwnd;

hwnd= FindWindow("ConsoleWindowClass", NULL); //处理顶级窗口的类名和窗口名称匹配指定的字符串,不搜索子窗口。

if(hwnd)

{

ShowWindow(hwnd, SW_HIDE);//设置指定窗口的显示状态

}while (1)

{//睡眠60s

_sleep(60000);//早上0到6点,不执行断网重连和写日志功能//now为1970 到目前经过秒数,ltm->tm_hour为现在的小时数

time_t now = time(0);

tm*ltm = localtime(&now);if (ltm->tm_hour > 6)

{int count = 0;//ping失败的次数

for (int i = 0; i < 6; i++)

{//写入日志文件

char buffer[32];

memset(buffer,0, sizeof(buffer));//断网重连

clock_t start, end;//计时

start =clock();

system("ping 8.8.8.8 -w 3500");//system执行cmd命令, 可以用cout打印返回结果

end =clock();double duration = ((double)end - start) /CLOCKS_PER_SEC;if (duration > 10.0)

{

count+= 1;

sprintf(buffer,"====> %s%d%s\n", "第", i, "次ping失败#############");

}else{

sprintf(buffer,"====> %s%d%s\n", "第", i, "次ping成功");

}char s[] = "log.txt";

write_log_file(s, FILE_MAX_SIZE, buffer, strlen(buffer));

}if(count == 6)

system("start /b C:\\\"Program Files\"\\\"Ruijie Networks\"\\\"Ruijie Supplicant\"\\RuijieSupplicant.exe");//路径用\\,双引号为转义字符,前面要加\//写入日志文件

char buffer[32];

memset(buffer,0, sizeof(buffer));if (count < 6)

sprintf(buffer,"====> %s%d%s\n", "6次ping测试成功了", 6 - count, "次,有网");elsesprintf(buffer,"====> %s\n", "6次ping测试全部都没有ping通过,没有网#######################################################################################################");char s[] = "log.txt";

write_log_file(s, FILE_MAX_SIZE, buffer, strlen(buffer));

}

}

}/*计时函数,没有用到*/

voidg()

{

clock_t start, end;

start=clock();

_sleep(1234);

end=clock();double duration = ((double)end - start) /CLOCKS_PER_SEC;

printf("%f second", duration);

}/*获取小时函数,这里只是测试,没用到*/

voidtime()

{//now为1970 到目前经过秒数,ltm->tm_hour为现在的小时数

time_t now = time(0);

tm*ltm = localtime(&now);

cout<< ltm->tm_hour << "蒋凯楠";

}intmain()

{

p();return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值