问题描述
我用socket做简单一个静态web服务器浏览器请求html文本没有问题,就是请求图片有了写困惑下面是代码
hdrFmt = 'HTTP/1.0 200 OKrn' 'Server: MySocket Serverrn' 'Content-Type: image/jpegrn' 'cahrset: utf-8rn' 'Accept-Ranges: bytesrn' 'Content-Length: %drnrn0'; 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是测试通过的,能发文本)可是效果是这样的
只发送了一部分而写入的另一个图片是正常的
代码是一边写入一边发送的,为什么结果不一样的?大神们看一下
问题解答
回答1:Content-Length 你写成了死的1024,应该是内容的长度(图片的大小)
即使你分多次发,Content-Length依然是图片的总大小,而不是每次发的大小
还有为什么读出来后不直接发送呢?还要写到另外一个文件?这么奇怪的逻辑??难道C++就是这样?不可能这么恶心吧?
PS: 单词拼错 cahrset -》charsetPS: hdrFmt字符串怎么还手动假 0 ??
回答2:这不是socket的问题,是http协议的问题。用c++写http,本身就是个自个儿找不自在的问题。