c++和socket问题

浏览:27日期:2023-05-02

问题描述

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

c++和socket问题

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

c++和socket问题

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

问题解答

回答1:

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

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

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

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

回答2:

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

相关文章: