关于压缩出现的问题?

Reage- 发布于 2013/02/19 16:31
阅读 369
收藏 0

     问题描述,小弟想实现一个web server中的压缩模块。我按照网上的的资料自己写了一个。发送字符串、文本文件都没有问题。可是发图片的时候总是错误。提示“Content Encoding Error。       
          The page you are trying to view cannot be shown because it uses an invalid or unsupported form of compression.” 我纠结了好长时。在网上也没有找到合适的解释。我在本地不通过网络传输直接解压也是没有问题的

我向浏览器发送的响应头部为

“HTTP/1.0 %d OK\r\n

Content-Type: image/png\r\n

Content-Type: text/html\r\n

Content-Encoding: gzip\r\n\r\n”

下面为读取文件的方法

     f = open ("1.png", O_RDONLY);
        if (0 > f){printf("error\r\n");continue;}
        while ((tmp = read (f, buf, MAX-1)) && tmp != EOF) {
            deflate_buffer(conn_socket, buf, tmp);
            //write (conn_socket, buf, tmp);
        }


//读数据进行压缩和发送的方法

int deflate_buffer (int sockd, char * msg, int len) {


    z_stream stream;//zlib使用的。
    int ret, flush;
    char in[MAX];//存放输入的数据
    char send[MAX ];//存放压缩过后的数据
    stream.zalloc = Z_NULL;
    stream.zfree = Z_NULL;
    stream.opaque = Z_NULL;
    stream.avail_in = 0;
    stream.next_in = Z_NULL;
    //压缩初始化。
    int tmp_result = deflateInit2(&stream,
                    DEFAULT_COMPRESSION,
                    Z_DEFLATED,
                    -MAX_WBITS,
                    DEFAULT_MEMLEVEL,
                    Z_DEFAULT_STRATEGY);
    if (Z_OK != tmp_result) {
        printf("deflateInit error: %d\r\n", tmp_result);
        return 0;
    }
    stream.avail_in = len;
    stream.next_in = msg;
    stream.avail_out = len;
    stream.next_out = send ;
    ret = deflate (&stream,Z_FINISH);
    assert (ret != Z_STREAM_ERROR);
    switch (ret) {
        case Z_NEED_DICT:
            ret = Z_DATA_ERROR;
        case Z_DATA_ERROR:
        case Z_MEM_ERROR:
            (void)inflateEnd (&stream);
            return ret;
    }
    write (sockd, send, stream.total_out);
    deflateEnd (&stream);
    return 1;
}


加载中
0
红薯
红薯

提问时,请不要关联一些毫无关联的软件,谢谢合作!

Reage-
Reage-
在这几款软件中都是用了相同的功能。
返回顶部
顶部