当客户端向服务端发出命令后,在规定的超时时间里未收到回答便退出了.而第二次发命令时,读到的是第一次返回的数据.所以想在发命令前把输入缓存区清空.请问如何清空socket缓存区的数据?VC里有现成的函数吗?谢谢!

解决方案 »

  1.   

    memset(buf, 0, sizeof(buf));
      

  2.   

    ascloudy() ,你没理解我的问题。不是清空我自定义的,而是socket的缓冲区.
      

  3.   

    tcp recv
    内核copy数据到socket接收缓冲区 ==== 应用进程调用recv copy socket接受缓冲区到应用进程.tcp send
    应用进程调用send copy数据到socket发送缓冲区,内核copy socket缓冲区数据到tcp/ip协议栈socket缓冲区是由内核来维护的!!!
      

  4.   

    close(),退出连接就应该清空了
      

  5.   

    tcp recv
    内核copy数据到socket接收缓冲区 ==== 应用进程调用recv copy socket接受缓冲区到应用进程.tcp send
    应用进程调用send copy数据到socket发送缓冲区,内核copy socket缓冲区数据到tcp/ip协议栈socket缓冲区是由内核来维护的,是不能清楚的啊,老大
      

  6.   

    好象有个叫setSocketOpt()的函数可以设置缓冲区的吧,试试那个吧
      

  7.   

    BOOL setsockopt(SOCKET s,
                 int level,
                 int optname,
                 const char *optval,
                 int optlen);
    那optval是干什么用的?
      

  8.   

    anjuta_c(天天学习不退步) 能推荐一本这方面的书吗??谢谢!!
      

  9.   

    wo wo wo !没有人能给我一个满意的回答。在等等吧!
      

  10.   

    有一个INTERNET_FLAG_RELOAD参数,可以达到这个功能
      

  11.   

    同意 anjuta_c(天天学习不退步)socket 的in/out buffer 是由内核来维护。
      

  12.   

    首先,VC中没有现成的函数,socket的缓冲区是内核来维护的
    其次,不明白你为什么要清除这个缓冲区,当你上次客户端退出操作的时候缓冲区存在数据不假,但是客户端退出,socket就被销毁了,怎么还会有个缓冲区?
    你的客户端下次连接服务器难道不是建立一个新的socket?缓冲区里面怎么可能还有数据?
      

  13.   

    fantiyu_sr() ( ),每次发出命令后,客户端并不断开连接.所有不会有socket就被销毁了.