乙個基於socket的資源共享平台的實現(四)

2021-08-30 12:39:23 字數 736 閱讀 9902

現在我們的整個系統基本可用了,還缺少什麼?

—— 客戶端自動公升級。

所以我們應該要開發乙個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,只要將...