用Socket的recv来接一个http包,若包头中没有content-length,怎么判断http包已收完?

解决方案 »

  1.   

    那检查
    Transfer-Encoding: chunked
      

  2.   

    个人觉得有3种情况
    1,有content-length
    解决办法:  根据长度读取就行了2,transfer-encoding:chunked
    解决办法:  根据chunk编码实现协议栈3,以上2项都没有,但是有connection:close
    解决办法:  根据recv返回0(服务器已经断开连接)
      

  3.   

    这个就是判断socket接收的字节大小(nRecvSize)int nReceSize = recv(m_s, buffer, nMaxLength, 0);
    while(1)
    {
        if(nReceSize <= 0 || nReceSize == WSAECONNRESET)
    break;
        nReceSize = recv(sck, buffer, nMaxLength, 0);
    }以上代码是在三种情况下结束接收数据,一是服务器端Socket关闭,另一个是Socket出错,再一个就是Socket超时。
      

  4.   

    这里提到的3是一种异常,任何时候都需要处理.其实第三种是找不到相关表示长度或者编码域的,默认以换行符结束的情况.
    http-header\r\n\r\n
    something\r\n