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

我用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 ??

いいねを押す +0
黄舟

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!