链接C#局域网桌面共享软件制作(一)

如果你运行这个软件查看流量监控就会发现1~2M/s左右的上传下载,并且有时会报错“参数无效”,如果你将屏幕截图保存到本地的话每张图片大概4M(bmp)、120KB(jpg),按照1秒传送10张图片计算,可想而知网络流量占用很大。下面我们将一一解决这些问题

1.压缩客户端图片

压缩函数(需using System.Drawing.Imaging;)

        /// <summary>/// 压缩图片,将压缩后的图片存入MemoryStream/// </summary>/// <param name="bitmap">原图片</param>/// <param name="ms">内存流</param>public void CompressImage(Bitmap bitmap, MemoryStream ms){ ImageCodecInfo ici = null;Encoder ecd = null; EncoderParameter ept = null; EncoderParameters eptS = null;try{ici = this.getImageCoderInfo("image/jpeg");ecd = Encoder.Quality;eptS = new EncoderParameters(1);ept = new EncoderParameter(ecd, 10L);eptS.Param[0] = ept;bitmap.Save(ms, ici, eptS);}catch (Exception ex){throw new Exception(ex.Message);}finally{ept.Dispose();eptS.Dispose();}}/// <summary>  /// 获取图片编码信息  /// </summary>  /// <param name="coderType">编码类型</param>  /// <returns>ImageCodecInfo</returns>  private ImageCodecInfo getImageCoderInfo(string coderType){ImageCodecInfo[] iciS = ImageCodecInfo.GetImageEncoders();ImageCodecInfo retIci = null;foreach (ImageCodecInfo ici in iciS){if (ici.MimeType.Equals(coderType))retIci = ici;}return retIci;}

客户端线程执行体改为

        private void threadimage(){try{while (true){MemoryStream ms = new MemoryStream();CompressImage(GetScreen(), ms);//很明显传引用byte[] b = ms.ToArray();sendsocket.Send(b);Thread.Sleep(100);}}catch (Exception ee){MessageBox.Show(ee.Message);return;}}

好了压缩后的图片只有38k左右

2.服务端报错处理

“参数无效”错误原因是

byte[] b = new byte[1024 * 1000];
hostSocket.Receive(b);
MemoryStream ms = new MemoryStream(b);
Image img=Image.FromStream(ms);//ms数据错误不能转换为Image

为什么ms无效?原因是图片大小超过了字节数组b的容量,或传回的数据丢失或有空的内容

解决方法:既然字节数组容量小了,我们就增大它的容量。如byte[] b = new byte[1024 * 10000];增加10倍

由于我们已经在客户端压缩图片了,所以就不用在考虑这点了。

另一点就是在将数据接收后判断数据是否为一张图片,如果不是就丢弃。

实现代码

        private bool getImage(MemoryStream ms,out Image image){try{image = Image.FromStream(ms);return true;}catch{image = null;return false;}}

服务器线程执行体改为

        private void trreadimage(){try{ while (true){byte[] b = new byte[1024 * 1000];hostSocket.Receive(b);MemoryStream ms = new MemoryStream(b);Image img;if (getImage(ms, out img)){picReceive.Image = img;}}}catch (Exception ee){MessageBox.Show(ee.Message);thread.Abort();}}

应该不会有人问为什么不用

int len=0;

byte[] b = new byte[1024];

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

{ms.write(b,0,b.lenth)}循环接收数据以节省内存分配吧.

需要说明的是:如果你还有更好的解决方法请分享给我们,当然这个程序还未完,上面只是解决问题的一些方法

转载,请注明出处和相关链接,否则追究其法律责任!

转载于:https://www.cnblogs.com/liuxiaobo93/p/3675466.html

C#局域网桌面共享软件制作(二)相关推荐

  1. wpf 客户端【JDAgent桌面助手】详解(二)桌面宠物制作详解

    目录区域: 业余开发的wpf 客户端终于完工了..晒晒截图(此文 由于当时没有开通csdn博客所以在博客园发了,后续文章都是csdn 首发奥) [晒视频了]业余开发wpf 客户端[JDAgent桌面助 ...

  2. 二维码制作方法分享,学会这招轻松制作二维码

    随着当今科技发展,二维码已经与大家的日常生活中有着密切的联系,例如扫码支付.扫一扫添加好友等.简单的来说二维码就是一条信息,它或许是一个网站链接,也可以是一段文字,而我们可以把自己的个人平台等制作成一 ...

  3. Android音乐App桌面图标制作以及启动页面开发(简易音乐 一)

    Android音乐App桌面图标制作以及启动页面开发( 简易音乐 一 ) 关于 效果 第一步 第二步 第一步 修改SplashAcitivity的布局页面 第二步 修改androidmanifest. ...

  4. 信创操作系统--麒麟Kylin桌面版 (项目二 桌面环境)

    信创操作系统–麒麟Kylin桌面版 (项目二 桌面环境) 目录 桌面布局 新建文件夹/文档 设置排序方式 调整图标 设置显示器 壁纸与屏保 剪贴板 任务栏 回收站 开始菜单 开始菜单模式 应用管理 窗 ...

  5. Java和C#环境中制作二维码图片

    二维码作为一种先进的应用,随着移动互联网和智能终端的普及而快速发展,在媒体.产品质量.仓储物流登各行各业都应用广泛.二维码具有存储量大.保密性高.追踪性高.抗损性强.被援性大.成本便宜等特性,这些特性 ...

  6. Sublimetext快捷键桌面背景制作1920x1080

    Sublimetext快捷键桌面背景制作 分享5个sublimetext的快捷键桌面背景,要求电脑分辨率为1920x1080,下面给出了这5个背景,要源文件的请留言... 只有一点:对电脑分辨率要求为 ...

  7. 使用超图桌面版制作点图层并发布为地图服务

    现在要用超图桌面版本制作点图层:并发布为地图服务: 进入超图桌面版本:新建文件型数据源: 保存文件型数据源,后缀名如图: 在数据源下新建数据集: 新建数据集对话框:选择创建类型为点:输入数据集名称: ...

  8. 虚拟机服务器实验三十一 Windows Server 2012 RDS桌面虚拟化之二VDI标准部署之托管共享桌面虚拟化...

    时间紧张,先记一笔,后续优化与完善. 验实三十一  Windows Server 2012 RDS桌面虚拟化之二VDI准标署部之托管同享桌面虚拟化 在Windows Server 2012近程桌面服务 ...

  9. 案例教程:一步步教你ps制作二寸照片

    下面是ps制作二寸照片具体操作步骤: 1.在photoshop教程中打开需要人像,因为大小尺寸不符合规定,所以用裁剪工具进行裁剪. 在工具箱中找到裁剪工具,或者按下C键,然后在上面的属性栏进行如下设置 ...

  10. Python案例笔记 | 用python制作二维码

    基于Python3版本的学习. 要用python制作二维码,需用python第三方库:MyQR . 安装myqr模块 首先需要在cmd中用pip安装myqr模块. win + r 打开运行命令,输入& ...

最新文章

  1. 小程序画布画海报保存成图片可以保存实现完整代码
  2. 武汉约100所中小学将试点人工智能课,现面向社会遴选教材
  3. Token ,Cookie、Session傻傻分不清楚?
  4. 生态物流的变革效应:左边资源、右边货源
  5. 常见的HTML5面试题(附答案)
  6. 15行用Python实现仿百度搜索引擎
  7. Linux环境 文件分割的方法
  8. silverlight 上下标
  9. Oracle 12C DataGuard部署以及维护
  10. 在IDEA中解决jar包冲突的神操作-必看,秒杀市面方法
  11. vbreport8.wpf.viewer 个别电脑不显示_手机听歌不过瘾?一招将Win10电脑变成蓝牙音箱...
  12. 3d建模电脑配置要求_2019年3d设计渲染电脑配置推荐
  13. NIPS放榜:谷歌占1/10,微软DeepMind打平,中国小哥4篇一作全球领先
  14. Redis详解(二)——Redis基本操作
  15. python3打造专属的下载软件
  16. 快手新作品监控提醒助手,可无水印下载视频和封面
  17. PS批量制作获奖证书并导出PNG
  18. 用C#开发.NET CF蓝牙通信模块
  19. C#窗体-个人简历生成(自己设计并编写一个 Windows 应用程序,要求用到TextBox、GroupBox、RadioButton )
  20. 领你走进10位管理大师的思想境界

热门文章

  1. 【6G】算力网络技术白皮书整理
  2. charset参数 sqluldr2_sqluldr2.bin数据库导出工具
  3. 老罗锤子手机公布会,我感到深深地愧疚
  4. python汉化之后好用吗_Python官方中文文档上线了:各种教程已汉化,不用再苦等野生翻译...
  5. plsqldev解决中文乱码问题
  6. 大漠插件:找图位置偏移(超出界面边界)
  7. 安装R和Rstudio win10
  8. matlab 保存不了文件,关于matlab文件无法保存的原因(转)
  9. 【实用软件】蓝奏云批量下载工具
  10. Vue 导出excel 导出多个sheet