非常强大 networkcomms2.3.1 通信框架,以前帮朋友做了一个图片采集系统,客户端采集相片后,通过TCP通信传送到服务器,本文把客户端传送图片到服务器的这部分提取出来。

由于每张图片的大小都不大,所以我们在传输图片时,没有采用传送文件的方式,而是采用了直接序列化图片的方式来进行。

当前支持的图片类型: jpg,png,gif 您可以自己添加扩充支持的图片类型

通信框架采用英国的开源的networkcomms2.3.1 通信框架   序列化器采用开源的protobuf

(因为空间大小限制,不包含通信框架源码,通信框架源码请另行下载)

我们先开看一下实现的效果

服务器端:

客户端:

在服务器端,我们把收到的图片保存在D盘根目录下(您可以另外指定路径),打开D盘看到收到的图片如下:

下面看一下具体的过程

第一步,首先进行服务器端的设置

(1)监听端口:

淮安掼蛋网 http://www.gamefrye.com/

IPEndPoint thePoint = new IPEndPoint(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text));  
            TCPConnection.StartListening(thePoint, false);
            button1.Text = "监听中";
            button1.Enabled = false;

(2) 针对图片上传写对应的处理方法:

NetworkComms.AppendGlobalIncomingPacketHandler<ImageWrapper>("UploadImage", IncomingUploadImage);

复制代码
  //处理客户端发来的图片
        private void IncomingUploadImage(PacketHeader header, Connection connection, ImageWrapper wrapper)
        {
            try
            {
                //具体的解析工作由通信框架完成
                //从图片包装器中获取到图片文件和图片名称
                Image image = wrapper.Image;
                string fileName = wrapper.ImageName;

//获取文件扩展名
                int index = fileName.LastIndexOf('.');
                string extion = fileName.Substring(
                    index + 1, fileName.Length - index - 1);
                extion = extion.ToLower();
                //设置文件格式
                ImageFormat imageFormat = ImageFormat.Bmp;

switch (extion)
                {
                    case "jpg":
                    case "jpeg":
                        imageFormat = ImageFormat.Jpeg;
                        break;
                    case "png":
                        imageFormat = ImageFormat.Png;
                        break;
                    case "gif":
                        imageFormat = ImageFormat.Gif;
                        break;
                }
                //此处,我们手工指定了一个保存路径,您可以自定义
                image.Save(@"D:\" + fileName, imageFormat);

ResMsgContract contract = new ResMsgContract();
                contract.Message = "上传成功";
                //发送回复信息给客户端
                connection.SendObject("ResUploadImage", contract);

}
            catch (Exception ex)
            {

}
        }

复制代码

第二步:客户端的设置

(1)连接服务器:

复制代码
 //给连接信息对象赋值
            connInfo = new ConnectionInfo(txtIP.Text, int.Parse(txtPort.Text));

//如果不成功,会弹出异常信息
            newTcpConnection = TCPConnection.GetConnection(connInfo);

TCPConnection.StartListening(connInfo.LocalEndPoint);

button1.Enabled = false;
            button1.Text = "连接成功";

复制代码

(2)从本地选择图片并上传

复制代码
  openFileDialog1.Filter = "图片文件|*.jpg|所有文件|*.*";

if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {

string shortFileName = System.IO.Path.GetFileName(openFileDialog1.FileName);
                 
                //图片包装类
                ImageWrapper wrapper = new ImageWrapper(shortFileName, Image.FromFile(openFileDialog1.FileName));

//发送图片包装类到服务器,并获取返回信息
                ResMsgContract resMessage = newTcpConnection.SendReceiveObject<ResMsgContract>("UploadImage", "ResUploadImage", 8000, wrapper);

if (resMessage.Message == "上传成功")
                {
                    MessageBox.Show("图片已经上传到服务器");
                }
                else
                {
                    MessageBox.Show("图片没有发送成功");
                }

}

复制代码

(三)关于 ImageWrapper类

在客户端与服务器端通信的过程中,我们注意到上面的程序中使用了一个ImageWrapper类,用来传递图片(Image)对象。

ImageWrapper类,存放在MessageContract类库中,此类用来序列化图片

我们知道Image类并不直接支持序列化,所以我们采用的方式是序列化之前把Image转化为二级制数据,反序列化之前再把二级制数据转化为Image类。

我们只负责定义ImageWrapper类,其他工作通信框架帮我们做好了。

ImageWrapper
工作到此完成,很少的代码量,就帮我们实现了传递客户端图片保存在服务器的功能。

注意:此种方式并不适合传递比较大的图片,如果图片比较大,比如10M以上,最好以传送文件的形式,分段发送.

networkcomms来做图片采集系统相关推荐

  1. layui上传图片列表展示_layui怎么做图片在列表中显示 | 学步园

    layui table中显示图片的方法: 图片需要用到模板.templet: 注意div不可省略,48px指的是div的高度,如果要决定img图片的高度,需要单独设计style ',style:'he ...

  2. Windows+Nginx+IIS做图片分布式存储详细步骤

    最近几天,一直在学习nginx在windows平台下的使用,为了寻找几种大量图片分布式存储而且有相对简单的存储方案 nginx是一种,还找到一种MongoDB GridFS 这两种方案我还是比较中意的 ...

  3. 用Lighttpd做图片服务器

    http://www.lsanotes.cn/install_lighttpd 用Lighttpd做图片服务器 一.安装lighttpd所需的库文件 1.安装 pcre wget ftp://ftp. ...

  4. QML做图片倒影效果(控件倒影)

    前言 用 QML 做图片倒影,主要是用ShaderEffect组件来实现,先来看看实际效果,如下: 还可以用同样的方式来做其他控件的倒影,例如: 正文 直接来看源码 import QtQuick 2. ...

  5. 【报错笔记】在做图片上传时上传图片后可以跳转到上传成功界面,也没有报错,数据库中也传入了值,可是eclipse中webapp下怎样都无法生存目录。

    在做图片上传时上传图片后可以跳转到上传成功界面,也没有报错,数据库中也传入了值,可是eclipse中webapp下怎样都无法生存目录. 我使用UUID生成8级目录,在webapp下创建目录,将图片传进 ...

  6. [css] 如何做图片预览,如何放大一个图片?

    [css] 如何做图片预览,如何放大一个图片? 图片不跨域的话用 canvas 来 drawImage 放大裁剪也可以. 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷 ...

  7. python做图片浏览器_保护隐私,用Python打造自己的照片浏览器

    现代操作系统比如Win10, Mac都自带了很好用的照片浏览器,采用人像识别技术自动识别家庭成员,还有简单的画面增强功能.然而这些功能都是需要连接云端服务器来实现的.虽然说很难说这些大公司会对你的那些 ...

  8. keras提取模型中的某一层_Keras做图片分类(四):迁移学习--猫狗大战实战

    本项目数据集来自kaggle竞赛,地址: https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/data 数据的训练集放在train文 ...

  9. 用AR.js做图片追踪的webAR Demo

    用AR.js做图片追踪的webAR Demo Demo效果 项目地址 部署使用 页面代码 替换想要追踪的图片 (1)web版(推荐使用) (2)node版 替换模型 Demo效果 可在手机浏览器中打开 ...

最新文章

  1. 枚举可以被子类化以添加新元素吗?
  2. 随机生成图像 与 图像的转维(reshape)
  3. git版本回退命令_Git学习版本回退和管理文件的修改及删除操作
  4. mysql二级缓存redis_redis实现二级缓存
  5. [机器学习笔记]奇异值分解SVD简介及其在推荐系统中的简单应用
  6. 三菱gxworks3安装失败_三菱gx works3下载 Gx Works3(三菱PLC编程软件) v1.031h 中文安装版(附安装教程+序列号) 下载-脚本之家...
  7. c#模拟看板控件_在Winform界面使用自定义用户控件及TabelPanel和StackPanel布局控件...
  8. 软件测试 vs 软件实施,哪个工作好?
  9. 大米产品体验师活动火热进行!感谢客户最真实的心声
  10. windows开机自启exe程序bat
  11. 计算机内存清理原理,怎样清理计算机内存
  12. imshow显示图像为纯白或者纯黑或者为杂点(noise)原因分析(下篇)
  13. E. MEX and Increments---dp+优先队列+贪心
  14. js 中的 this、that
  15. 仙之侠道2玖章各个任务详情_仙之侠道2玖章任务地点 | 手游网游页游攻略大全...
  16. 华为认证存储方向冷门吗?这个存储证考下来有啥用?
  17. 新玺配资:股票集合竞价规则
  18. Cocos creator导出微信小游戏, 转发给朋友,分享到朋友圈 灰色不能点击
  19. 尾矿库安全监测关键点
  20. python实现浮雕效果的原理_python+opencv+图像特效(图像灰度处理、颜色翻转、图片融合,边缘检测,浮雕效果,颜色映射)...

热门文章

  1. python字典程序题_急!一道关于python字典的编程题!求思路!
  2. pytorch 模型可视化_【深度学习】高效使用Pytorch的6个技巧:为你的训练Pipeline提供强大动力...
  3. php 实现跨站下载图片,一个图片url访问后直接下载怎样实现
  4. 互联网晚报 | 8月10日 星期二 | 携程启动“2021混合办公试验”;网易云音乐暂缓IPO;上汽通用五菱年累销量突破百万...
  5. 互联网日报 | 滴滴全球日订单首次突破5000万;抖音直播间将不支持第三方来源商品;拼多多“开学季”上线...
  6. 搞了这么久的产品,终于看清了真相
  7. 数据异常HTML,@ Html.DropDownListFor的数据绑定异常
  8. linux 环境变量导出,关于Linux:如何删除导出的环境变量?
  9. 基于主动学习和克里金插值的空气质量推测
  10. 作者:宾军志(1976-),男,御数坊(北京)科技咨询有限公司联合创始人。...