c++和socket问题
PHPz
PHPz 2017-04-17 13:49:37
0
2
615

我用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是测试通过的,能发文本)
可是效果是这样的

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

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

PHPz
PHPz

学习是最好的投资!

全部回覆(2)
小葫芦

Content-Length 你寫成了死的1024,應該是內容的長度(圖片的大小)

就算你分多次發,Content-Length依然是圖片的總大小,而不是每次發的大小

還有為什麼唸出來後不直接發送呢?還要寫到另外一個文件?這麼奇怪的邏輯? ?
難道C++就是這樣?不可能這麼噁心吧?

PS: 單字拼錯 cahrset -》charset
PS: hdrFmt字串怎麼還手動假 0 ??

黄舟

這不是socket的問題,是http協定的問題。用c++寫http,本身就是自個兒找不自在的問題。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板