這是一個我個人寫的庫,主要實現(xiàn)的是基于tcpclient的網站外擴網盤的解決方案,可以使用家用網絡外掛個人電腦中的資源到自己的網站上,已經上傳nuget,大家可以直接在nuget包管理中搜索到,直接搜索ZmjNetDisk即可,下面介紹具體的使用方式:
另外一提這個庫做的比較的個人化,因為他就是為了我的網站而服務的,我的網站是store.zhaimaojun.cn,大家可以去體驗一下實際的效果,也可以搜索微信小程序 什邡市宅貓君網絡工作室,我做了網頁版和小程序版,都是基于這個庫。未來有空我可以再升級一下,改成更加泛化的,再改成多中心式的,如果有誰有資金想去搞一搞的話,弄成多中心式,就像p2p一樣文件可以傳輸的帶寬和速率就更快更好了,當然也可能不能和傳統(tǒng)的p2p去抗衡吧,唯一的優(yōu)點就是顛覆傳統(tǒng)的網盤模式,可以把資源嵌入到頁面中瀏覽,而不是必須在指定的頁面或者客戶端才能瀏覽。
第一步 獲取和安裝庫
第二步 服務器端和客戶端開啟服務
1 /**服務器開啟服務,這個需要運行在網站端*/ 2 var nd = new ZmjNetDisk.NetDiskServer(new ZmjNetDisk.NetDiskServerConfig { Ip = "0.0.0.0", Port = 11111, });//端口可以隨意根據自己需求 3 nd.StartListen();//必須要調用startlisten來開啟偵聽,也可以調用stoplisten來停止偵聽,可以多次調用
1 /**客戶端開啟服務*/ 2 var diskClient = new NetDiskClient(SearchPicture, SearchVideo, SearchSource, GetSourceInfo, ScaleImage, new NetDiskClientConfig { ServerIp = "你的服務器ip", Port = 11111, ConnectTimeout = 12000, });//新建客戶端服務對象 3 diskClient.NoticeMsg += DiskClient_NoticeMsg;//這里自定義對通知的處理 4 diskClient.Start();//調用start來開啟服務 5 diskClient.Client.Client.Send(new byte[1] { 0 });//這里必須間歇性的發(fā)送一個0,兩個作用,一是快速發(fā)現(xiàn)掉線情況,二是防止tcp鏈接假死。可以定時發(fā)送,比如15-30秒發(fā)送一次即可,這種發(fā)送不影響整體通訊 6 /**這里需要額外注意的是,調用start會額外開啟線程去處理服務器發(fā)來的命令,但是diskClient應該要定時的去檢測鏈接的有效性,失效了應該積極主動的去重新鏈接,也就是dispose之后重新new,再start*/
客戶端在新建的時候需要提供五個方法,這5個方法含義如下:
SearchPicture:這是隨機獲取圖片的,傳入寬高和查看級別來獲取對應的一張隨機圖片,返回圖片的code,用于獲取圖片
SearchVideo:這是隨機獲取視頻的,傳入視頻文件大小來獲取指定大小以下的短視頻資源,返回視頻的code,用于獲取視頻
SearchSource:這是搜索指定類型和級別的資源的,返回格式化的資源對象,用于傳輸給服務器端,
GetSourceInfo:這是獲取指定的資源詳細內容的,返回格式化的資源對象,
ScaleImage:這是用于縮放圖片的,傳入圖片和需要縮放到的大小,返回圖片縮放到指定大小后的文件流
第三步 服務器端搜索資源和獲取資源
1 /**服務器端獲取文件*/ 2 using var file = await Task.Run(() => Server.WaitForGetFile("要獲取的文件的code", 獲取的文件的開始位置, 獲取文件的結束位置,可以是-1, 用于取消的token)) ?? throw new BadHttpRequestException("找不到指定的文件", (int)HttpStatusCode.NotFound); 3 /**服務器端獲取縮放后的圖片,縮放傳入0,0表示不縮放*/ 4 using var file = await Task.Run(() => Server.WaitForGetImage("圖片的code", 開始, 結束, 縮放寬度, 縮放高度, 取消token)) ?? throw new BadHttpRequestException("找不到指定的文件", (int)HttpStatusCode.NotFound); 5 /**隨機獲取圖片的code,寬高用于標識需要獲取的圖片的寬高比和像素水平,例如水平的2k或4k圖,或者垂直的4k或8k圖等*/ 6 var rcode = Server.RandomPicture(w, h, level)?.SourceCode; 7 /**隨機獲取視頻的code,時間用于限制獲取的視頻的文件大小*/ 8 var code = Server.RandomVideo(30000000, level)?.SourceCode; 9 /**服務器端搜索指定關鍵詞的資源,搜索出來的是很多資源*/ 10 var sources = Server.SearchSource(NetDiskSourceType.game, level, "要搜索的關鍵詞", 0, 8, NetDiskSourceOrderType.none, out _);//其中資源類型有多種,可根據資源類型區(qū)分不同的資源來搜索,0和8用于形成頁,比如每頁是8個,0,8就表示第一頁,8,8表示第二頁,16,8表示第三頁以此類推,后面的排序類型需要在資源搜索的方法中自行實現(xiàn) 11 /**服務器端獲取指定資源的詳細內容,包括資源中有什么文件,有什么圖片等等*/ 12 var source = Server.GetSource("資源的code"); 13 /**服務器端獲取指定的資源文件所在的資源的整體信息,可以同時獲取到該資源下所有的其他的文件,常用于視頻播放時看它的上一個視頻和下一個視頻等*/ 14 var source = server.GetFileInfo("資源文件的code");
由于這個是服務器端主動發(fā)送命令給客戶端,客戶端處理完命令后再發(fā)回給服務器的方式,所以客戶端這邊不需要太多的處理,客戶端這邊可以直接寫成一個后臺運行的服務,這樣就可以不需要管了,而服務器端這邊是可以主動隨時發(fā)起請求的。下載文件時,用戶直接請求服務器,服務器再請求客戶端,然后客戶端把文件發(fā)送到服務器,服務器再轉發(fā)給客戶這種模式。這就要求需要有一個固定的帶寬還可以的服務器作為中介來實現(xiàn)內網穿透。文章來源:http://www.zghlxwxcb.cn/news/detail-840479.html
這個庫的優(yōu)點是,獲取文件后可以用api來返回文件,這樣你可以直接吧這些資源嵌入到頁面中,比如視頻,圖片等,可以直接在頁面上瀏覽播放,不像一眾網盤那樣,網盤里的東西只能自己看,分享后也只能在他自己的網盤客戶端或者網站上才能瀏覽,不能把鏈接嵌入到網站中隨時去瀏覽。文章來源地址http://www.zghlxwxcb.cn/news/detail-840479.html
到了這里,關于內網穿透,遠程網盤,網站外掛資源,可嵌入到頁面的網盤資源解決方案的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!