찾다

 >  Q&A  >  본문

c++和socket问题

我用socket做简单一个静态web服务器
浏览器请求html文本没有问题,
就是请求图片有了写困惑
下面是代码


            hdrFmt =
            "HTTP/1.0 200 OK\r\n"
            "Server: MySocket Server\r\n"
            "Content-Type: image/jpeg\r\n"
            "cahrset: utf-8\r\n"
            "Accept-Ranges: bytes\r\n"
            "Content-Length: %d\r\n\r\n\0";
            sprintf(headers, hdrFmt.data(),1024);
            send(csock, headers, strlen(headers), 0);
            fstream rfile;
            fstream wfile;
            char databuf[1024];
            rfile.open("test.jpg", ios::out  | ios::in  | ios::binary);
            wfile.open ("wfile.jpg", ios::out  | ios::binary | ios::trunc);
            while(rfile.is_open())
            {
                memset(databuf,0,sizeof(databuf));
                rfile.read(databuf,sizeof(databuf)-1);
                int readLen = rfile.gcount();
                wfile.write(databuf, readLen);
                send(csock, databuf, readLen, 0);//
                if(rfile.eof())
                    break;
            }
            rfile.close();
            wfile.close();
            return ;

是读取图片之后一边写入另一个图片里,一边发送socket(socket是测试通过的,能发文本)
可是效果是这样的

只发送了一部分
而写入的另一个图片是正常的

代码是一边写入一边发送的,为什么结果不一样的?
大神们看一下

PHPzPHPz2814일 전628

모든 응답(2)나는 대답할 것이다

  • 高洛峰

    高洛峰2017-04-17 13:51:37

    Content-Length 你写成了死的1024,应该是内容的长度(图片的大小)

    即使你分多次发,Content-Length依然是图片的总大小,而不是每次发的大小

    还有为什么读出来后不直接发送呢?还要写到另外一个文件?这么奇怪的逻辑??
    难道C++就是这样?不可能这么恶心吧?

    PS: 单词拼错 cahrset -》charset
    PS: hdrFmt字符串怎么还手动假 0 ??

    회신하다
    0
  • 黄舟

    黄舟2017-04-17 13:51:37

    这不是socket的问题,是http协议的问题。用c++写http,本身就是个自个儿找不自在的问题。

    회신하다
    0
  • 취소회신하다