楼主不是查了,对方关闭连接了,recv返回0recv既然返回了,还超时做什么?为什么不返回-1,是因为正常断开了连接

解决方案 »

  1.   

    楼主顺便还想请教个问题。
    recv的时候,我的缓冲buf设为多大比较好?
    是一个char一个char的接收,还是?
      

  2.   

    楼主顺便还想请教个问题。
    recv的时候,我的缓冲buf设为多大比较好?
    是一个char一个char的接收,还是?随便测试就用大点的buf呗在常规通信,一般都是有协议的,比如有包头,或者结束符如有包头,包头里面有个字段为包的长度,那么你就开始的时候一直收到满一个包头的长度,得到包的长度后,再接收包体的长度
      

  3.   

    表这样,要过年了,没有软妹币,只有存点csdn币过年
      

  4.   

    但是用socket发送http请求的时候,有时候http回复的头部没有content length这一字段啊,那怎么办?
      

  5.   

    用一个list,每次收到多少个自己,就new内存出来,把这次收到的存下来,然后加到ist里面最后收到recv返回0,说明接收完。然后根据http协议,对收到的所有数据拼接起来,解码。没有content length是正常的,可以仔细研究下http协议
      

  6.   

    所以正常的接收完,recv是会返回0的喽?这个是服务器端来关闭这个连接?所以recv返回0?
      

  7.   

    If no error occurs, recv returns the number of bytes received and the buffer pointed to by the buf parameter will contain this data received. If the connection has been gracefully closed, the return value is zero.
      

  8.   

    thanks
    所以要判断是不是接收完全了,还是得靠自己定协议是吧?
    比如在头部赛一个字段定义长度之类?