第一次接触串口,写点东西加深自己对串口的印象:

通过参考一些网上的实例,我明白了串口怎么简单的进行通信交流,但是我所需要的还是图片等大文件在串口中的传输,串口传输是通过二进制位进行单位传输的,所以传输速度比较慢,在一开始,我将图片转换成二进制,然后传输,在另一端口,接收到二进制数据并转换成图片形式,代码如下:

private void Sendpicture() {
int i = ;
if (!port.IsOpen)
{
MessageBox.Show("端口已被关闭!");
return;
}
UpdateStutas();
///清理残余的缓冲区
port.DiscardInBuffer();
port.DiscardOutBuffer();
//写入图片信息从固定文件夹中得到信息
FileStream fs = new FileStream(@"E:\图片转换测试\发送图片\1.jpg", FileMode.Open, FileAccess.Read); //将其读作二进制数UTF-8编码
BinaryReader br = new BinaryReader(fs);
int length = (int)fs.Length;
List<byte> buf = new List<byte>();//填充到这个临时列表中
while (length > )
{
byte tempByte = br.ReadByte();
buf.Add(tempByte);
length--;
} fs.Close();
br.Close();
//转换列表为数组后发送
port.Write(buf.ToArray(), , buf.Count);
//记录发送的字节数
sendnum.Text = "发送字节数:" + buf.Count;
} public void RecivePicdata(object sender, SerialDataReceivedEventArgs e) {
///数据长度
int count = port.BytesToRead;
string msg = null;
//{
byte[] buff = new byte[count];
///接收数据
port.Read(buff, , count); //将字节数据转换为二进制数据
FileStream fs = new FileStream(@"E:\图片转换测试\接收图片\2.jpg", FileMode.Append, FileAccess.Write); //创建1.jpg图片
BinaryWriter bw = new BinaryWriter(fs);
foreach (byte buf in buff)
{
bw.Write(buf); }
fs.Close();
bw.Close(); }

在这之中我还发现了一个非常困扰我的问题,就是串口的缓冲区问题,在一开始,我所传输图片只收到4096个字节,郁闷了很久才明白是缓冲区的原因,串口默认缓冲区是4k,而在缓冲区之外的数据就直接清除了,所以如果单次传输大文件时,要重新设置串口的输入缓冲区ReadBufferSize和输出缓冲区WriteBufferSize这两个属性,下面是串口的几个缓冲区,第一次接触,当初对我真是折磨王啊。

串口属性:BytesToRead(获取接收缓冲区中数据的字节数)--这里提到的是“接收缓冲区”

串口属性:ReadBufferSize(获取或设置 System.IO.Ports.SerialPort 输入缓冲区的大小)---这里提到的是“输入缓冲区”

串口属性:BytesToWrite(获取发送缓冲区中数据的字节数)---这里提到的是“发送缓冲区”

串口属性:WriteBufferSize(获取或设置串行端口输出缓冲区的大小)---这里提到的是“输出缓冲区”

串口属性:DiscardOutBuffer(丢弃来自串行驱动程序的传输缓冲区的数据)---这里提到的是“传输缓冲区”

C#串口图片传输以及对串口缓冲区的简单理解的更多相关文章

  1. .NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯,flyfire.CustomSerialPort 的使用

    目录 1,前言 2,安装虚拟串口软件 3,新建项目,加入 flyfire.CustomSerialPort 4,flyfire.CustomSerialPort 说明 5,开始使用 flyfire.C ...

  2. C#串口操作类,包括串口读写操作

    串口进行操作的类,其中包括写和读操作,类可设置串口参数.设置接收函数.打开串口资源.关闭串口资源,操作完成后,一定要关闭串口.接收串口数据事件.接收数据出错事件.获取当前全部串口.把字节型转换成十六进 ...

  3. C# Socket 简易的图片传输

    关于网络的数据传输我就是个小白,所以今天学习一下简易的Socket图片传输. 客户端和服务器的连接咱们上次已经学过了,咱们先从简易的文件传输入手.下面开始代码分析了. Server.cs using ...

  4. WCF开山篇__图片传输

    WCF开山篇__图片传输   一.  简介 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序接口,可以翻译为Windows通讯接口,它是. ...

  5. 转载 C#开发串口总结,并提炼串口辅助类到公用类库中

    C#开发串口总结,并提炼串口辅助类到公用类库中 开发C#相关的项目有很多年了,一直没有接触串口的开发,近期由于工作的需要,需要了解熟悉对硬件串口的开发,通过对串口的深入了解,串口也不再是什么神秘的东西 ...

  6. windows串口编程Win32,PComm串口开发

    https://blog.csdn.net/u011430225/article/details/51496456 https://blog.csdn.net/eit520/article/detai ...

  7. andorid 平台调用Web Service , 图片传输

    今天学习了下android调用web service,进行图片传输 下面是代码详解: onActivityResult 方法在图片剪裁完成之后调用: protected void onActivity ...

  8. 串口屏Modbus协议,串口屏的modbus协议资料,串口屏modbus通讯协议开发,串口屏之modbus协议使用技巧

    串口屏Modbus协议,串口屏的modbus协议资料,串口屏modbus通讯协议开发,串口屏之modbus协议使用技巧 本例程中用51单片机作为Modbus从机,从机的设备地址为2,从机有4个寄存器, ...

  9. 小草手把手教你 LabVIEW 串口仪器控制——初识VISA串口

    有些人,学习一样东西时候,喜欢现成的例子.很多人学习一门技术,都喜欢现成的例子开始,比如学单片机的啊,最开始都是修改的例子吧,学语言的也是.最开始都是模仿.这个年头看书上的理论知识太浪费时间了.所以啊 ...

随机推荐

  1. Java Foreach用法

    java中的while.for.if.switch等用法和c语言差不多,所以我们关注下foreach就行了. 一.创建ForeachTest.java public class ForeachTest ...

  2. list列表

    list列表 list:一个有序的集合 创建列表 语法格式: 列表名 = [元素1, 元素2, 元素3…….,元素n] 注:列表中的元素⽤逗号隔开. 注:列表⾥⾯的元素可以是不同类型的数据. 列表元素 ...

  3. WUSTOJ 1283: Hamster(Java)

    1283: Hamster 参考博客 wust_tanyao的博客 题目   第0个月有1对仓鼠.仓鼠的寿命是M个月,仓鼠成年后每个月生一对仓鼠(一雌一雄),问N个月后有仓鼠多少对.更多内容点此链接 ...

  4. 1264: 祈雨(Java)

    WUSTOJ 1264: 祈雨 Description 在持续了X天的干旱之后,ACM俱乐部决定由LCM去请求雨大师XH祈雨,CMS则准备工具收集雨水,由于ACM俱乐部中有一个逆天的存在,BobLee ...

  5. 【BFS】斗地主

    斗地主 题目描述 众所周知,小 X 是一个身材极好.英俊潇洒.十分贪玩成绩却依然很好的奆老.这不,他又找了他的几个好基友去他家里玩斗地主了……身为奆老的小 X 一向认为身边人和自己一样的厉害,他坚信你 ...

  6. 3.ASP.NET Core Docker学习-构建单机多容器环境

    基于docker Docker运行 : docker run -p 8001:80 -d --name name1 name2:1.0 其中-p 8001:80 8001是主机的端口,80是容器的端口 ...

  7. linux运维工程师常用命令

    1.ls [选项] [目录名 | 列出相关目录下的所有目录和文件 -a  列出包括.a开头的隐藏文件的所有文件-A  通-a,但不列出"."和".."-l  列 ...

  8. Unity性能优化-对象池

    1.对象池Object Pool的原理: 有些GameObject是在游戏中需要频繁生成并销毁的(比如射击游戏中的子弹),以前的常规做法是:Instantiate不断生成预设件Prefab,然后采用碰 ...

  9. 在.netcore webapi项目中使用后台任务工具Hangfire

    安装Hangfire 在webapi项目中通过nuget安装Hangfire.Core,Hangfire.SqlServer,Hangfire.AspNetCore,截止到目前的最新版本是1.7.6. ...

  10. kong网关: service+route+upstream

    对于刚开始学习kong网关,总是一脑子浆糊迷迷糊糊.虽然已经安装好,但却不知道接下来如何下手, 因为包含项太多:service.routes.upstream.consumer.plugins等等.一 ...