byte 接收数据 断点-控制器给C#上位机窗口程序发送数据的字节接收问题

问题描述

控制器给C#上位机窗口程序发送数据的字节接收问题

现在的问题是:设置断点后,发现接收的字节长度不稳定,最少是4个,最多会达到上千个。
代码原先是这么写的:
int lenth = serialPort1.BytesToRead;
if (lenth != 0)
{
Byte[] receiveByte = new Byte[length];
serialPort1.Read(receiveByte, 0, length)
………………………………………………………
…………接收的字节转换流程………………
………………………………………………………
}
我想问一下:如果要是固定的每次接收5个字节(包括了报头),是不是需要把receiveByte的字节长度和串口控件的Read方法的第三个参数改成5就行了?

现在控制器被人借走暂时无法尝试,如果有其他方法欢迎推荐

解决方案

我记得,serialPort接收到的数据本来就是长度不固定的,有时是N,有时是M,本来就是这样的,和TCP接收数据段是一样的呀,你得自己收集到足够的长度后再解析的

解决方案二:

  • 你的说法是对的,如果只要5个字节,就把长度设置成5,那么它会至多只给你5个字节,
  • 但是你的想法是不对的。你每次要5个字节的话。我以为是你觉得5个字节正好是你的一个数据块,可以分析出一点东西来。
  • 但是万一通讯过程中掉了1个字节数据,你的数据就永远偏了一个字节。所以永远也不会有正确数据了,除非重启通讯。
  • 比较好的做法是设定一个协议,在看到协议开始标识前的所有字符都丢弃。(那可能是前一个包的丢了部分数据的剩余部分)
时间: 2024-09-14 03:24:42

byte 接收数据 断点-控制器给C#上位机窗口程序发送数据的字节接收问题的相关文章

stm32不停地发送一个字节的数据,mfc编写的上位机接收到了但是显示乱码

问题描述 stm32不停地发送一个字节的数据,mfc编写的上位机接收到了但是显示乱码 用MFC写了一个串口接收的函数,为了测试,单片机stm32每隔一秒不停地发送同一个数,比如是0x32,想显示在接收框里面,但是每次显示都是乱码,如果以16进制显示就是8位16进制码. 设置断点调试了一下,发现bt是成功接收到了的,但是以cstring显示就乱码了,为什么呢? 代码如下: void C无人机地面控制终端Dlg::OnCommMscomm1() { // TODO: 在此处添加消息处理程序代码 VA

上位机向单片机发送字符串

问题描述 上位机向单片机发送字符串 上位机向单片机发送一串字符串,存入一个数组缓冲区RX1_Buffer[COM_RX1_Lenth]中,接下来单片机提取数组缓冲区中的一部分字符串,将该字符串转化为整形数据,接着将整形数据转化为十六进制数通过串口发送给上位机,单片机连续向上位机发送数据,上位机第一次能正确的接收到上位机发送给单片机的数据,过后上位机收到的数据就是错误的,不知道是什么原因,附部分程序代码如下: void UART1_int (void) interrupt UART1_VECTOR

向使用MultiView和GridView控件的JavaScript弹出窗口要发送值和从之接收值

介绍 很多时候,我们要在我们的应用程序中创建一个弹出窗口.通常当我们弹出一个窗口 ,我们还要使调用窗口和弹出的窗口进行交互.本文中我将展示如何在一个 ASP.NET 应用程序中创建一个弹出窗口 (使用 JavaScript)和如何从弹出窗口返回值到原始的调用页面并自动引发该页上的按钮的单击事件.另外,我将使用 MultiView 控件和 带分页的GridView 控件. 第一步:创建第一个页面 创建一个新的 ASP.NET 网站,默认情况下您会自动创建 Default.aspx.在该页上添加一个

c#上位机与单片机通信,上位机接收不到单片机返回的数据

问题描述 c#上位机与单片机通信,上位机接收不到单片机返回的数据 我遇到的问题是: 1上位机给单片机发送数据,单片机能接收到,但是单片机返回的数据上位机收不到 2我不用单片机,直接把数据线上的TX.RX短接,再用上位机发送数据,这时 上位机显示区就能显示上位机发送的数据: 3我用串口调试助手调试单片机程序,调试助手能正常接收单片机返回的数据: 以上3个问题,很是矛盾,不知道哪里出问题了,请高手帮助一下! 解决方案 asc码接收,十六进制接收不行,上位机编码 解决方案二: 曾经写过的一个,接收函数

显示-stm32与上位机通过网口通信,网口读不出数据?

问题描述 stm32与上位机通过网口通信,网口读不出数据? 使用w5500evb与上位机通信,w5500evb是一个网络芯片,它的MCU是stm32f103系列的,要实现将传感器采集到的数据值通过网口显示在上位机的网络调试助手上,现在我可以通过串口将数据显示在串口调试助手上(说明传感器工作正常),但是通过网口传数据时,在上位机的网络调试助手不显示,请教大神,这是什么原因呢?(网络通信是正常的,我用上位机的网络调试助手给下位机发送数据123,下位机收到之后会自动将123发送给上位机,而且在网络调试

编程-Java与C#用socket通讯 只求发送数据部分和数据接收部分(发送简单的文本信息)

问题描述 Java与C#用socket通讯 只求发送数据部分和数据接收部分(发送简单的文本信息) 只求发送数据部分和数据接收部分 TCP连接不要 客户端和服务器响应次数也不要 只求发送数据部分和数据接收部分(java发送c#接收) 解决方案 server: Java code public void handleConnection(Socket connection) { System.out.println("客户:" + connection.getInetAddress() +

Java Socket通信(一)之客户端程序 发送和接收数据_java

网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类.通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和接受数据. 对于Socket通信简述,服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容.Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容. 例1:客户端的简略写法(一). Socket clien

java使用Socket类接收和发送数据_java

网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类.通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和接受数据.在本文及后面的数篇文章中将详细讨论Socket类的使用,内容包括Socket类基础.各式各样的连接方式.get和set方法.连接过程中的超时以及关闭网络连接等. 在本文中,我们将讨论使用Socket类的基本步骤和方法.一般网络客户端程序在连接服务程序时要进行以下三步操作. 连接服务器 发送和接收数据 关闭网络连接 一.连接服务器 在

C#程序与PLC通讯PLC收到c#程序发送过来的指令并正确相应之后为什么没有返回数据

问题描述 C#写的程序发送一条指令给PLC,PLC收到并正确相应之后为什么没有返回数据,但是用串口调试助手发送同一条指令给plc,plc有数据返回,请问怎么样才能让C#程序发送指令之后也有数据返回C#程序打开串口时串口监听程序监听到的信息是这样的CharsEof:26,Error:0,break:0,Event:26,Xon:17,Xoff:19串口调试助手打开串口时串口监听程序监听到的信息是这样的CharsEof:0,Error:0,break:0,Event:0,Xon:17,Xoff:19