久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2417|回復: 0
收起左側

程序練習作品 -> Auto_Update V1.0

[復制鏈接]
ID:71922 發表于 2015-1-11 00:09 | 顯示全部樓層 |閱讀模式
  為了給用戶更好的服務,現在很多軟件都提供檢查在線升級的功能。
  要實現這個功能,普遍的方法是利用 ftp空間,ftp空間里面存放了信息配置文件以及升級文件。程序一般會從空間上先下載一個存儲升級信息的配置文件。通過讀取這個配置文件,判斷是否要進行程序升級、更新。如果要更新,則會通過配置文件中指定的下載地址去下載升級文件。

例如:ftp 上存放的配置文件如下【Upate.ini】:

[Version]
Version=12
[URL]
URL=http://www.zg4o1577.cn/123.exe

那么程序會先下載 Upate.ini 文件,然后將自己的版本號與配置文件中的 Version 對比,如果是這個版本號,說明沒有更新。如果比它小,則說明需要更新,讀取URP 下載地址,進行下載升級文件。
如果我們有更新了程序,版本為 13, 則可以修改配置文件,再上傳到 ftp 空間上。程序就能自動檢測到文件更新了。

上面介紹的這種方式,比較通用適合免費的FTP空間。
還有一種方式,使用匿名FTP在程序里獲取版本信息文件。不必下載配置文件。不過不適合免費的FTP空間。但是免費的FTP空間不太安全。我就遇到過空間被不定時無故關閉,官方稱提供免費的服務器訪問量太大暫時關閉部分空間緩解壓力。建議我升級付費空間就不存在此問題。還有一個問題就是自己的靜態網站上被掛馬了!我靠!靜態網站總不可能被注入什么的吧?

如果自己搭建FTP空間也行,但是考慮到 ADSL 的上下行不對稱。我不建議這樣做。

前面說了一大堆都是說更新的方法,免費FTP空間不安全,如果為了一些練習作品去購買付費空間貌似又不太值。那怎么辦呢?我之前就一直糾結這個問題。
如今突然有靈感了,在不需要購買付費的FTP空間或不使用不安全的免費FTP空間的前提下設計了這個 Auto_Update V1.0 程序。




這個程序的功能很簡單,就是接受用戶的更新信息,回饋升級文件的下載地址。。
我們先添加程序的升級列表再把升級文件上傳到網盤里,就會回饋升級文件的網盤下載地址(支持外鏈的更好,知道的話順便告訴我一聲哈)。

設置服務端的方法:
先去3322 或 花生殼 申請一個免費的動態域名,有路由的朋友先在路由上設置端口映射和自動更新動態域名(路由都具備這些功能)。如果沒有路由的朋友直接下載3322 或花生殼的客戶端程序,登錄后 它會自動指向你的外網ip。  這個目的是為了,讓你的程序通過這個域名獲取到你的IP。因為ADSL 的IP是會變的。
然后運行Auto_Update V1.0程序,在Auto_Update V1.0 填入你的域名和端口。然后點擊【添加/刪除】按鈕,添加你的升級列表。升級列表里寫入你的低版本程序名 相對應的新版本的程序名以及下載地址。這樣才能讓Auto_Update 才能知道是哪個程序要升級哪個版本以及下載地址是什么。這樣就可以準確回饋給相應的用戶,不會在多個程序間出現混亂。這個程序支持 260 個不同的程序升級記錄。




你的程序升級模塊添加代碼方法:
先點擊Auto_Update V1.0 上的【生成文件】按鈕,Auto_Update V1.0 會在自身目錄下生成一個 AutoUpdateClient.h 頭文件和 TestUpdate.cpp 例程文件

AutoUpdateClient.h:提供了一個 核心的AutoUpade()函數接口。用來連接  Auto_Update V1.0 獲得升級信息。具體使用方法可以看看頭文件里面的注釋。
TestUpdate.cpp:是一個調用例程。

TestUpdate.cpp:

=================================================================

// 升級必須要的頭文件和鏈接庫
#include <WINSOCK2.H>
#pragma comment(lib,"ws2_32.lib")


#include <windows.h>
#include <stdio.h>


// 升級函數
#include "AutoUpdateClient.h"




/************************************************************************
* 參數:模式 0:實時檢查 1:檢查一次
/************************************************************************/
void Updatee(int MS)
{       
        // 服務器域名地址
        char HostNmane[]                        = "lovemengx.vicp.net";


        // 發送自身版本信息及接受新版本的信息
        char Rname[MAX_PATH]                = "TestUpdate V1.0";


        // 接受下載地址
        char Download[MAX_PATH]                = {0};


        // 臨時緩沖區
        char Temp[MAX_PATH]                        = {0};


        // 服務器端口
        int Port = 1230        ;


        while(1)
        {       
                //        返回 0 則表示 檢測到新版本
                if (!AutoUpade(HostNmane, Port ,Rname,Download))
                {
                        sprintf(Temp, "程序檢測到最新版本:%s\t\n\n下載地址是:%s\t", Rname, Download);
                        if (IDYES == ::MessageBox(0,Temp , "檢測到新版本程序~~", MB_YESNO | MB_ICONQUESTION | MB_SYSTEMMODAL))
                        {
                                ShellExecute(NULL, "open", Download, NULL, NULL, SW_SHOWNORMAL);
                        }
                        else
                        {
                                exit(0);
                        }
                }
                // 如果模式是 非實時檢查則跳出循環結束檢查
                if(MS)
                        break;
        }
}


/************************************************************************/
/* 一個實時檢查升級的例子                                               */
/************************************************************************/
void SSJC()
{               
        puts("**************************************************************");
        puts("這是個實時檢查自動升級的例子...");
        puts("你可以根據自己所需修改...");
        puts("**************************************************************");
        puts("已經啟動實時檢查升級...");
        CreateThread(0,0,(LPTHREAD_START_ROUTINE)Updatee,0,0,0);
}


/************************************************************************/
/* 一個啟動立即檢查升級的例子                                         */
/************************************************************************/
void YUpate()
{
        puts("**************************************************************");
        puts("這是個啟動時檢查升級的例子...");
        puts("**************************************************************");
        puts("已經啟動檢查升級...");
        Updatee(1);
}


void main()
{
        int i=0;
        puts("***************************************************************");
        puts(" 1:啟動時檢查一次升級例子");
        puts(" 2:實時檢查升級例子");
        puts("");
        puts("【兩個例子都調用了 AutoUpade() 這個函數來獲取服務器的升級信息】");
        puts("***************************************************************");
        puts("請選擇:");
        scanf("%d", &i);


        if (i == 1)
        {
                puts("你選擇了【啟動時檢查一次升級例子】");
                YUpate();
        }
        else
        {
                puts("你選擇了【實時檢查升級例子】");
                SSJC();
                Sleep(1000000);       
        }
}


========================================================================
實驗圖:








回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩av在线不卡 | 毛片免费在线 | 日本精品一区二区三区视频 | 一区二区在线 | 91视频观看 | 久久久久国产一区二区三区四区 | 91一区二区三区 | 亚洲欧美一区二区三区视频 | 韩日在线视频 | 国产日韩视频 | 久久精品久久久久久 | 啪啪免费| 91视频免费| 五月免费视频 | 国产乱码高清区二区三区在线 | 一区二区三区视频免费观看 | 成人午夜精品一区二区三区 | 亚洲午夜精品一区二区三区 | 羞羞色影院 | 国产aa| 欧美成人精品 | 久久国产欧美日韩精品 | 午夜国产 | 91一区二区 | 亚洲成人精品一区 | 国产精品国产三级国产aⅴ入口 | 中文字幕免费在线 | 99久久精品免费看国产免费软件 | 国产精品免费一区二区三区四区 | 久久久久久久香蕉 | 午夜免费网 | 99精品99久久久久久宅男 | 亚洲欧美在线观看 | 人人九九精 | 天堂一区二区三区四区 | 亚洲一级av毛片 | 欧美aa在线 | 欧美日韩一 | 久久久久久久久中文字幕 | 久久久久国 | 国产精品久久久久久网站 |