首页 新闻 会员 周边 捐助

C#读取串口时Read方法不返回

0
悬赏园豆:10 [已解决问题] 解决于 2018-03-02 11:46

关于读取,C#的serialPort类的Read方法不确定返回。当发送端写1000个字节,读取时直接得到这1000字节并返回,当发送端写5个字节时,接收端的Read不返回。在接收端读取时,目标是读取2048字节,上面的两种发送情况都没有发送到2048字节。不确定为什么是这样的逻辑,MSDN上说是要读取到它期望的数量时才会返回,这里我没有设置超时,也就是无限等待。

对于缓冲区,从网上看到这样的说法:写缓冲区满后,仍然执行写操作,会覆盖一部分数据。但是在试验时,先后向缓冲区写2048字节,再写5个字节,但要接收端看不到最后的5个字节。

  请各位神人指教一二。

deeeeeed的主页 deeeeeed | 初学一级 | 园豆:6
提问于:2017-12-05 18:59
< >
分享
最佳答案
0

即使你作为接收的时候,对方发不发送又不是你决定的,而是你接收时的发送方决定的。你是读了,但是对方不写,你能收么。

收获园豆:10
花飘水流兮 | 专家六级 |园豆:13617 | 2017-12-05 19:56

我是不太明白串口发送和接收的交互机制,我在测试过程中发现结果是和MSDN上描述的不同。

deeeeeed | 园豆:6 (初学一级) | 2017-12-06 09:36

@deeeeeed: 我说的这个跟设备没关系。跟你的通讯协议相关,按你所述很明显你用的是request-response半双工模式,就像你请求网页一样,你请求了一定能得到网页正常数据吗 —— http有很多状态码,你可以参照一些。

通讯是上面的半双工还是像qq一样的全双工,跟串口设备没关系,串口反正是2,3两线随便你搞的。

花飘水流兮 | 园豆:13617 (专家六级) | 2017-12-06 10:17

@花飘水流兮: 那不同的通讯协议是如何控制数据的传送的,应用层与底层如何配合的呢?

deeeeeed | 园豆:6 (初学一级) | 2017-12-06 13:59
其他回答(1)
0

定义个结束符或者timeout确定对方是否发送完,一般是没问题的

猝不及防 | 园豆:2882 (老鸟四级) | 2017-12-06 08:40

在实际使用过程中确实可以这样,我是想对串口流控有更深入的了解

支持(0) 反对(0) deeeeeed | 园豆:6 (初学一级) | 2017-12-06 09:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册