程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#局域網桌面共享軟件制作(二)

C#局域網桌面共享軟件制作(二)

編輯:C#入門知識

C#局域網桌面共享軟件制作(一)

如果你運行這個軟件查看流量監控就會發現1~2M/s左右的上傳下載,並且有時會報錯“參數無效”,如果你將屏幕截圖保存到本地的話每張圖片大概4M(bmp)、120KB(jpg),按照1秒傳送10張圖片計算,可想而知網絡流量占用很大。下面我們將一一解決這些問題

1.壓縮客戶端圖片

壓縮函數(需using System.Drawing.Imaging;)

 
         
         
         
         = = = = = .getImageCoderInfo(==  EncoderParameters(=  EncoderParameter(ecd, ] =    
           
           
           
         ImageCodecInfo getImageCoderInfo(==  (ImageCodecInfo ici =

客戶端線程執行體改為

  (= [] b =

好了壓縮後的圖片只有38k左右

 

2.服務端報錯處理

“參數無效”錯誤原因是

 

[] b =  [ * ];
= =Image.FromStream(ms);//ms數據錯誤不能轉換為Image

為什麼ms無效?原因是圖片大小超過了字節數組b的容量,或傳回的數據丟失或有空的內容

解決方法:既然字節數組容量小了,我們就增大它的容量。如byte[] b = new byte[1024 * 10000];增加10倍

由於我們已經在客戶端壓縮圖片了,所以就不用在考慮這點了。

另一點就是在將數據接收後判斷數據是否為一張圖片,如果不是就丟棄。

實現代碼

  getImage(MemoryStream ms,= =  

服務器線程執行體改為

  ([] b =  [ * =  (getImage(ms, =

應該不會有人問為什麼不用

int len=0;

byte[] b = new byte[1024];

while((len=hostSocket.Receive(b))>0)

{ms.write(b,0,b.lenth)}循環接收數據以節省內存分配吧.

 

需要說明的是:如果你還有更好的解決方法請分享給我們,當然這個程序還未完,上面只是解決問題的一些方法

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved