我用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是测试通过的,能发文本)
可是效果是这样的
只发送了一部分
而写入的另一个图片是正常的
代码是一边写入一边发送的,为什么结果不一样的?
大神们看一下
高洛峰2017-04-17 13:51:37
Content-Length 你写成了死的1024,应该是内容的长度(图片的大小)
即使你分多次发,Content-Length依然是图片的总大小,而不是每次发的大小
还有为什么读出来后不直接发送呢?还要写到另外一个文件?这么奇怪的逻辑??
难道C++就是这样?不可能这么恶心吧?
PS: 单词拼错 cahrset -》charset
PS: hdrFmt字符串怎么还手动假 0 ??