如何清除socket的输入输出缓冲区

时间:2021-07-24 07:00:01
我用的是异步套接字的方法来进行socket通信,在进行下一次接收之前,需要清除一下socket的缓冲区,怎么进行啊

11 个解决方案

#1


接收数据前 格式化缓存不行嘛?menset()

#2


引用楼主 alieenyaya 的回复:
我用的是异步套接字的方法来进行socket通信,在进行下一次接收之前,需要清除一下socket的缓冲区,怎么进行啊


清空?你把缓冲区里都读完不就没了吗?

#3


清空就没有数据了啊,你还收什么?

#4


int ioctlsocket命令获取socket缓冲区中数据的长度,FIONREAD命令。

然后读完就可以了。

#5


把缓冲区里内容读干净就清除了

#6


没有,我这是与硬件相连的,有时候在没读之前用户可能会关闭读取的线程,但是如果再去循环读的时候,就会直接读到之前缓冲区里没被读的信息,而不会等待下次信息到来前再读到了,这样就会出现误判

#7


引用 3 楼 bragi523 的回复:
清空就没有数据了啊,你还收什么?

我现在是控制一个硬件,先给它发送一个命令,它开始运转,到达某个位置后,它给我发送一个到达的命令,我在程序中发完命令后,会去等待它回传的命令,从而判断它到达位置,但现在是如果用户通过按钮中断了这个操作的话,如果刚好中断在运转的过程中的话,硬件到达位置后还是会给我发送一个到达命令存在接收缓冲区,如果此时我又重新开始刚才的发送,然后读取达命令的话,因为接收缓冲区中已经有上次没读的数据,就会响应接收操作,那样还没到位置的时候,这边程序就会判断已经到了位置,就会出现误判,所以最好在每次发送和读取的操作之前清空一下缓冲区

#8


引用 7 楼 alieenyaya 的回复:
引用 3 楼 bragi523 的回复:

清空就没有数据了啊,你还收什么?

我现在是控制一个硬件,先给它发送一个命令,它开始运转,到达某个位置后,它给我发送一个到达的命令,我在程序中发完命令后,会去等待它回传的命令,从而判断它到达位置,但现在是如果用户通过按钮中断了这个操作的话,如果刚好中断在运转的过程中的话,硬件到达位置后还是会给我发送一个到达命令存在接收缓冲区,如果此时我又重新开……


每次发送前用recv接收一次丢弃掉就相当于清空了

#9


我看是设计有问题

#10


没有一个和设备建立连接初始化的命令交互过程。

引用 9 楼 covsno 的回复:
我看是设计有问题

#11


现在问题我解决了,改变了下思路,谢谢各位啊

#1


接收数据前 格式化缓存不行嘛?menset()

#2


引用楼主 alieenyaya 的回复:
我用的是异步套接字的方法来进行socket通信,在进行下一次接收之前,需要清除一下socket的缓冲区,怎么进行啊


清空?你把缓冲区里都读完不就没了吗?

#3


清空就没有数据了啊,你还收什么?

#4


int ioctlsocket命令获取socket缓冲区中数据的长度,FIONREAD命令。

然后读完就可以了。

#5


把缓冲区里内容读干净就清除了

#6


没有,我这是与硬件相连的,有时候在没读之前用户可能会关闭读取的线程,但是如果再去循环读的时候,就会直接读到之前缓冲区里没被读的信息,而不会等待下次信息到来前再读到了,这样就会出现误判

#7


引用 3 楼 bragi523 的回复:
清空就没有数据了啊,你还收什么?

我现在是控制一个硬件,先给它发送一个命令,它开始运转,到达某个位置后,它给我发送一个到达的命令,我在程序中发完命令后,会去等待它回传的命令,从而判断它到达位置,但现在是如果用户通过按钮中断了这个操作的话,如果刚好中断在运转的过程中的话,硬件到达位置后还是会给我发送一个到达命令存在接收缓冲区,如果此时我又重新开始刚才的发送,然后读取达命令的话,因为接收缓冲区中已经有上次没读的数据,就会响应接收操作,那样还没到位置的时候,这边程序就会判断已经到了位置,就会出现误判,所以最好在每次发送和读取的操作之前清空一下缓冲区

#8


引用 7 楼 alieenyaya 的回复:
引用 3 楼 bragi523 的回复:

清空就没有数据了啊,你还收什么?

我现在是控制一个硬件,先给它发送一个命令,它开始运转,到达某个位置后,它给我发送一个到达的命令,我在程序中发完命令后,会去等待它回传的命令,从而判断它到达位置,但现在是如果用户通过按钮中断了这个操作的话,如果刚好中断在运转的过程中的话,硬件到达位置后还是会给我发送一个到达命令存在接收缓冲区,如果此时我又重新开……


每次发送前用recv接收一次丢弃掉就相当于清空了

#9


我看是设计有问题

#10


没有一个和设备建立连接初始化的命令交互过程。

引用 9 楼 covsno 的回复:
我看是设计有问题

#11


现在问题我解决了,改变了下思路,谢谢各位啊