关于读取,C#的serialPort类的Read方法不确定返回。当发送端写1000个字节,读取时直接得到这1000字节并返回,当发送端写5个字节时,接收端的Read不返回。在接收端读取时,目标是读取2048字节,上面的两种发送情况都没有发送到2048字节。不确定为什么是这样的逻辑,MSDN上说是要读取到它期望的数量时才会返回,这里我没有设置超时,也就是无限等待。
对于缓冲区,从网上看到这样的说法:写缓冲区满后,仍然执行写操作,会覆盖一部分数据。但是在试验时,先后向缓冲区写2048字节,再写5个字节,但要接收端看不到最后的5个字节。
请各位神人指教一二。
即使你作为接收的时候,对方发不发送又不是你决定的,而是你接收时的发送方决定的。你是读了,但是对方不写,你能收么。
我是不太明白串口发送和接收的交互机制,我在测试过程中发现结果是和MSDN上描述的不同。
@deeeeeed: 我说的这个跟设备没关系。跟你的通讯协议相关,按你所述很明显你用的是request-response半双工模式,就像你请求网页一样,你请求了一定能得到网页正常数据吗 —— http有很多状态码,你可以参照一些。
通讯是上面的半双工还是像qq一样的全双工,跟串口设备没关系,串口反正是2,3两线随便你搞的。
@花飘水流兮: 那不同的通讯协议是如何控制数据的传送的,应用层与底层如何配合的呢?
定义个结束符或者timeout确定对方是否发送完,一般是没问题的
在实际使用过程中确实可以这样,我是想对串口流控有更深入的了解