怎样清空套接字的缓冲区?
while(1)
{
// 接收数据
recv(sockConn, recvBuf, 100, 0);
if(!memcmp(recvBuf,TOA_COMMAND_START,strlen(TOA_COMMAND_START)))
{
printf(...);//打印收到的数据
}
}
结果同一个数据被打印多次了,也就是说recv取数的缓冲区没有更新。我现在要怎样才能清空recv接收数据的缓冲区啊?
[解决办法]
你程序里用memcmp比较TOA_COMMAND_START和recvBuf,相等则打印,那肯定打印的都是TOA_COMMAND_START,被打印多次也不奇怪啊,何况对方可能真给你发了多个TOA_COMMAND_START
[解决办法]
用抓包软件看看是不是同一数据发送了多次了
[解决办法]
每次打印完了memset(recvBuf,0,sizeof(recvBuf))
[解决办法]
需要判断recv的返回值
[解决办法]
recv这个函数,使用时最好检查返回值。
[解决办法]
memset(recvBuf,0,len);
不过在接收过程中无法清空,因为另一半控制实际上在网卡上.
[解决办法]
判断一下recv的返回值,看是否有新数据
[解决办法]
你是在做同步通信还是异步通信
我觉得不是所谓缓冲区的问题
[解决办法]
不要叫我向爷了
听着别扭
呵呵
你多贴些代码出来吧
两边的都贴些
这些代码看不出什么问题
同步通信案例接受时应该阻塞的
你确定连接是正常的么
[解决办法]
recv返回值才是表明你真正接收了多少数据,错误是-1,正常结束是0,不然就是你接收的数据大小
[解决办法]
recv完成,其内容一定已经被清空了,不存在缓存无法清空问题
1。 memset之后依然有同样内容被打印,则一定是对方重发了
2。如果没有memset,怀疑recv返回-1,你依然打印上次收到内容
[解决办法]
就算recv返回-1,memset过了的BUF也不会是上次收到的内容啊,估计是重发了,要看其它的代码才能判断。