【问题标题】:How to store the http response and send to browser?如何存储http响应并发送到浏览器?
【发布时间】:2019-10-23 18:52:18
【问题描述】:

我正在做一个关于代理服务器的练习。 在代理服务器中缓存时我遇到了一些问题。 当服务器向代理发送响应并代理将其转发给客户端时,使用以下源代码。没关系。

//that code is ok
fstream File;
while (P->isClientClose == FALSE && P->isServerClose == FALSE){
    memset(Data, 0, 1024);
    int length = recv(*(P->SERVER), Data, sizeof(Data), 0);
    if (length <= 0)
        break;
    length = send(*(P->CLIENT), Data, length, 0);
    if (length <= 0)
        break;
}

但是当我尝试将 HTTP 响应写入文件,然后从文件中读取所有字符以发送到客户端时,我遇到了问题。 浏览器说:ERR_CONTENT_DECORDING_FAILED

我正在测试代理缓存是如何工作的,但我不明白哪里出错了。 即使当我创建一个字符串 Temp(Data) 并使用 send(*(P->CLIENT), Temp.c_str(), length, 0) 时,客户端仍然会说该错误。 请帮我。 :D

//that code is error
fstream File;
while (P->isClientClose == FALSE && P->isServerClose == FALSE){
    memset(Data, 0, 1024);
    int length = recv(*(P->SERVER), Data, sizeof(Data), 0);
    if (length <= 0)
        break;

    File.open("test.dat", ios::out|ios::binary);
    File << Data;
    File.close();
    File.open("test.dat", ios::in|ios::ate|ios::binary);
    ifstream::pos_type pos = File.tellg();
    int size = pos;
    cout << "size: " << size << endl;
    char *pChars = new char[size+1]{};
    File.seekg(0, ios::beg);
    File.read(pChars, size);
    File.close();   
    length = send(*(P->CLIENT), pChars, length, 0);
    delete[]pChars;
    if (length <= 0)
        break;
}

【问题讨论】:

  • File &lt;&lt; Data; 不应用于写入二进制数据,您也忽略实际接收到的数据量。 memset(Data, 0, 1024); 使用了一些幻数。
  • 您能详细解释一下收到的数据吗?长度是接收到的字节数,我认为没关系。 memset 尝试将 Data 设置为空数组字符。 (之前,我声明 char* Data=new char[1024]
  • 那你在传递sizeof(Data)的时候有错误。接收的字节数可能少于请求的字节数。
  • 哦@VTT,我明白了这个问题,谢谢家伙! :D
  • 顺便说一句,我认为sizeof(Data) 是我可以接收的最大字节数。我认为当我收到的少于它时这不是问题。

标签: c++ sockets http encoding httpresponse


【解决方案1】:

有些事情很突出。

更新:看起来你的通讯已经整理好了,所以我删除了那个运球。

但我认为您的问题在于: 文件

VTT 是正确的,指出 File http://www.cplusplus.com/reference/ostream/ostream/operator%3C%3C/

我假设 Data 是一个 char * 。

代替文件

 File.write( Data, length);    

然后读回来写给客户端....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多