WinSock中如何清除接收缓冲区

Posted

技术标签:

【中文标题】WinSock中如何清除接收缓冲区【英文标题】:How do you clear the receive buffer in WinSock 【发布时间】:2010-09-23 13:16:23 【问题描述】:

我去搜索这个,发现至少有一个人问但​​没有得到答案。我认为有必要启动一个发送和接收段(同一套接字连接上更大进程的一部分)并期望接收缓冲区中已经没有任何内容。

我没有看到任何答案,但在我自己意识到另一种看起来更干净的解决方法之前确实想到了这个问题(阅读下一段的“结尾”)。只需将 RecieveTimeout 设置为 1,或者,如果您认为发送方仍在发送过程中,则设置稍大一些的值。然后只需使用 socketflags = 0 调用 Receive 并丢弃结果。

谁有更好的办法?

【问题讨论】:

是的,我也是这样做的,将超时设置为 1,然后读取丢弃所有读取的内容,直到我得到 WSAETIMEDOUT... 真的很想知道还有其他方法吗!?跨度> 【参考方案1】:

这个要求的起源是什么?您真的需要丢弃数据吗?

【讨论】:

【参考方案2】:

我当时以为我做了,但后来只是读取并缓存了结果,然后从缓存中删除了。我正在搜索发送命令时出现的不同结果序列(字符串)。发送的下一个命令不能假定接收缓冲区中不再有任何字符,因为协议“标准”指定响应可能以 CR 或 LF 或 CRLF 或 LFCR 或什么都没有结束。由于该协议的定义非常松散,因此不同的组织以不同的方式实施该协议。

【讨论】:

以上是关于WinSock中如何清除接收缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中清除字节缓冲区

用winsock发送位图

如何在使用之前清除内部服务器套接字缓冲区的内容

Python中的UDP套接字:如何清除缓冲区并忽略oldes消息

如何确定套接字缓冲区中是不是接收到所有数据?

linux如何清空串口接收缓冲区和发送缓冲区数据