C#局域网桌面共享软件制作(二)
链接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#局域网桌面共享软件制作(二)相关推荐
- wpf 客户端【JDAgent桌面助手】详解(二)桌面宠物制作详解
目录区域: 业余开发的wpf 客户端终于完工了..晒晒截图(此文 由于当时没有开通csdn博客所以在博客园发了,后续文章都是csdn 首发奥) [晒视频了]业余开发wpf 客户端[JDAgent桌面助 ...
- 二维码制作方法分享,学会这招轻松制作二维码
随着当今科技发展,二维码已经与大家的日常生活中有着密切的联系,例如扫码支付.扫一扫添加好友等.简单的来说二维码就是一条信息,它或许是一个网站链接,也可以是一段文字,而我们可以把自己的个人平台等制作成一 ...
- Android音乐App桌面图标制作以及启动页面开发(简易音乐 一)
Android音乐App桌面图标制作以及启动页面开发( 简易音乐 一 ) 关于 效果 第一步 第二步 第一步 修改SplashAcitivity的布局页面 第二步 修改androidmanifest. ...
- 信创操作系统--麒麟Kylin桌面版 (项目二 桌面环境)
信创操作系统–麒麟Kylin桌面版 (项目二 桌面环境) 目录 桌面布局 新建文件夹/文档 设置排序方式 调整图标 设置显示器 壁纸与屏保 剪贴板 任务栏 回收站 开始菜单 开始菜单模式 应用管理 窗 ...
- Java和C#环境中制作二维码图片
二维码作为一种先进的应用,随着移动互联网和智能终端的普及而快速发展,在媒体.产品质量.仓储物流登各行各业都应用广泛.二维码具有存储量大.保密性高.追踪性高.抗损性强.被援性大.成本便宜等特性,这些特性 ...
- Sublimetext快捷键桌面背景制作1920x1080
Sublimetext快捷键桌面背景制作 分享5个sublimetext的快捷键桌面背景,要求电脑分辨率为1920x1080,下面给出了这5个背景,要源文件的请留言... 只有一点:对电脑分辨率要求为 ...
- 使用超图桌面版制作点图层并发布为地图服务
现在要用超图桌面版本制作点图层:并发布为地图服务: 进入超图桌面版本:新建文件型数据源: 保存文件型数据源,后缀名如图: 在数据源下新建数据集: 新建数据集对话框:选择创建类型为点:输入数据集名称: ...
- 虚拟机服务器实验三十一 Windows Server 2012 RDS桌面虚拟化之二VDI标准部署之托管共享桌面虚拟化...
时间紧张,先记一笔,后续优化与完善. 验实三十一 Windows Server 2012 RDS桌面虚拟化之二VDI准标署部之托管同享桌面虚拟化 在Windows Server 2012近程桌面服务 ...
- 案例教程:一步步教你ps制作二寸照片
下面是ps制作二寸照片具体操作步骤: 1.在photoshop教程中打开需要人像,因为大小尺寸不符合规定,所以用裁剪工具进行裁剪. 在工具箱中找到裁剪工具,或者按下C键,然后在上面的属性栏进行如下设置 ...
- Python案例笔记 | 用python制作二维码
基于Python3版本的学习. 要用python制作二维码,需用python第三方库:MyQR . 安装myqr模块 首先需要在cmd中用pip安装myqr模块. win + r 打开运行命令,输入& ...
最新文章
- 小程序画布画海报保存成图片可以保存实现完整代码
- 武汉约100所中小学将试点人工智能课,现面向社会遴选教材
- Token ,Cookie、Session傻傻分不清楚?
- 生态物流的变革效应:左边资源、右边货源
- 常见的HTML5面试题(附答案)
- 15行用Python实现仿百度搜索引擎
- Linux环境 文件分割的方法
- silverlight 上下标
- Oracle 12C DataGuard部署以及维护
- 在IDEA中解决jar包冲突的神操作-必看,秒杀市面方法
- vbreport8.wpf.viewer 个别电脑不显示_手机听歌不过瘾?一招将Win10电脑变成蓝牙音箱...
- 3d建模电脑配置要求_2019年3d设计渲染电脑配置推荐
- NIPS放榜:谷歌占1/10,微软DeepMind打平,中国小哥4篇一作全球领先
- Redis详解(二)——Redis基本操作
- python3打造专属的下载软件
- 快手新作品监控提醒助手,可无水印下载视频和封面
- PS批量制作获奖证书并导出PNG
- 用C#开发.NET CF蓝牙通信模块
- C#窗体-个人简历生成(自己设计并编写一个 Windows 应用程序,要求用到TextBox、GroupBox、RadioButton )
- 领你走进10位管理大师的思想境界
热门文章
- 【6G】算力网络技术白皮书整理
- charset参数 sqluldr2_sqluldr2.bin数据库导出工具
- 老罗锤子手机公布会,我感到深深地愧疚
- python汉化之后好用吗_Python官方中文文档上线了:各种教程已汉化,不用再苦等野生翻译...
- plsqldev解决中文乱码问题
- 大漠插件:找图位置偏移(超出界面边界)
- 安装R和Rstudio win10
- matlab 保存不了文件,关于matlab文件无法保存的原因(转)
- 【实用软件】蓝奏云批量下载工具
- Vue 导出excel 导出多个sheet