11 个解决方案
#1
接收数据前 格式化缓存不行嘛?menset()
#2
清空?你把缓冲区里都读完不就没了吗?
#3
清空就没有数据了啊,你还收什么?
#4
int ioctlsocket命令获取socket缓冲区中数据的长度,FIONREAD命令。
然后读完就可以了。
然后读完就可以了。
#5
把缓冲区里内容读干净就清除了
#6
没有,我这是与硬件相连的,有时候在没读之前用户可能会关闭读取的线程,但是如果再去循环读的时候,就会直接读到之前缓冲区里没被读的信息,而不会等待下次信息到来前再读到了,这样就会出现误判
#7
我现在是控制一个硬件,先给它发送一个命令,它开始运转,到达某个位置后,它给我发送一个到达的命令,我在程序中发完命令后,会去等待它回传的命令,从而判断它到达位置,但现在是如果用户通过按钮中断了这个操作的话,如果刚好中断在运转的过程中的话,硬件到达位置后还是会给我发送一个到达命令存在接收缓冲区,如果此时我又重新开始刚才的发送,然后读取达命令的话,因为接收缓冲区中已经有上次没读的数据,就会响应接收操作,那样还没到位置的时候,这边程序就会判断已经到了位置,就会出现误判,所以最好在每次发送和读取的操作之前清空一下缓冲区
#8
每次发送前用recv接收一次丢弃掉就相当于清空了
#9
我看是设计有问题
#10
没有一个和设备建立连接初始化的命令交互过程。
#11
现在问题我解决了,改变了下思路,谢谢各位啊
#1
接收数据前 格式化缓存不行嘛?menset()
#2
清空?你把缓冲区里都读完不就没了吗?
#3
清空就没有数据了啊,你还收什么?
#4
int ioctlsocket命令获取socket缓冲区中数据的长度,FIONREAD命令。
然后读完就可以了。
然后读完就可以了。
#5
把缓冲区里内容读干净就清除了
#6
没有,我这是与硬件相连的,有时候在没读之前用户可能会关闭读取的线程,但是如果再去循环读的时候,就会直接读到之前缓冲区里没被读的信息,而不会等待下次信息到来前再读到了,这样就会出现误判
#7
我现在是控制一个硬件,先给它发送一个命令,它开始运转,到达某个位置后,它给我发送一个到达的命令,我在程序中发完命令后,会去等待它回传的命令,从而判断它到达位置,但现在是如果用户通过按钮中断了这个操作的话,如果刚好中断在运转的过程中的话,硬件到达位置后还是会给我发送一个到达命令存在接收缓冲区,如果此时我又重新开始刚才的发送,然后读取达命令的话,因为接收缓冲区中已经有上次没读的数据,就会响应接收操作,那样还没到位置的时候,这边程序就会判断已经到了位置,就会出现误判,所以最好在每次发送和读取的操作之前清空一下缓冲区
#8
每次发送前用recv接收一次丢弃掉就相当于清空了
#9
我看是设计有问题
#10
没有一个和设备建立连接初始化的命令交互过程。
#11
现在问题我解决了,改变了下思路,谢谢各位啊