現在我們的整個系統基本可用了,還缺少什麼?
—— 客戶端自動公升級。
所以我們應該要開發乙個loader,客戶端能夠自動檢測更新、公升級,並可以在伺服器端打包公升級流及公升級流資訊下發。
在此系統中,我直接是伺服器下發一條公升級資訊(帶版本號),然後與客戶端當前版本號進行配對,若高於客戶端,則開始客戶端更新公升級。
這裡由於我們的客戶端很小,所以我直接將客戶端exe通過tcp傳輸下來。客戶端接收完畢之後,自我關閉,換成更新過的exe啟動。
這裡有個小伎倆,乙個exe程式如何公升級自身?
當時我上網找了許多,都覺得太麻煩,於是自己想了乙個「歪門邪道」,不過真的很好用,這裡跟大家分享一下。
假設我們正在執行的客戶端程式叫做 1.exe,我們通過tcp拿到的公升級後的程式叫做 2.exe。
我們此時需要在1.exe中將自身結束,將2.exe改名成1.exe並且啟動它。問題就出在這一步,既然已經把自己都結束了,如何去講2.exe改名和啟動呢?
——通過bat。
我們在1.exe執行過程中動態建立乙個批處理檔案,其乾以下事情:
start:
若存在1.exe ,刪除之,若刪除不了,返回start;
將2.exe改名為1.exe;
啟動1.exe;
將自己刪掉;
注意最後在1.exe中我們需要非同步啟動bat(很顯然,不然死迴圈了),這樣就可以實現我們所說的功能啦。
部分**如下:
最後看看我們的醜陋的mfc下的介面
乙個基於socket的資源共享平台的實現(三)
需要共享資源,則需要探測本地資源分布情況。此處我們用的演算法比較2 不過還是說說吧。下面使用mfc的cfilefind實現乙個本地檔案遞迴收集器,以jason格式儲存檔案路徑和檔案大小 然後定期收集,對收集結果md5,若發生變化,則上傳伺服器。伺服器端使用乙個資料結構維護所有資源站資源,對於使用者的...
乙個基於socket的資源共享平台的實現(一)
前段時間和朋友一起做了乙個類似於電驢 迅雷 msn工具的毛坯模型,基本上所有功能都是從socket通訊級別向上實現。整體架構為c s架構,使用mfc實現。技術上都是很老的東西,此文主要介紹類似於 電驢 的這樣乙個軟體的設計思路和部分 框架。我們實現的 不是很優化,僅為設計思路的佐證。我最初做這個小軟...
乙個基於socket的資源共享平台的實現(二)
我們用乙個ns download pool類來封裝對其的管理。接下來我們針對資源傳送過程中限速進行分析和實現。如果需要將傳送速度限制在乙個值,我們可以這麼理解,單位時間內最多允許傳送資料為n,若超過之,就需要降低速度,若不足,則需要提高速度。如何控制速度?這裡我們採用最樸素的方法,sleep,只要將...