c++ - 如何存储http响应并发送到浏览器?
问题描述
我正在做一个关于代理服务器的练习。在代理服务器中缓存时我遇到了一些问题。当服务器向代理发送响应并代理将其转发给客户端时,使用以下源代码。没关系。
//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 << Data;
VTT 指出 File << Data 没有将指针 Data 的全部内容写入文件是正确的。<< 运算符不知道您要写入的数据的长度。此外,<< 运算符似乎没有 char * 重载。见:http ://www.cplusplus.com/reference/ostream/ostream/operator%3C%3C/
我假设 Data 是一个 char * 。
而不是 File << Data,尝试:
File.write( Data, length);
然后将其读回并写入客户端....
推荐阅读
- phpunit - 是否可以从模拟方法返回模拟?
- powershell - 使用 powershell pnp 对文件夹的 Sharepoint 权限
- .htaccess - 哈希不可能的htaccess
- php - PHP 数组验证
- javascript - 在 json 中返回特定国家/地区的数组
- amazon-web-services - Symfony 和 AWS BS - .env 文件外控制台的环境变量
- json - Send json data for json get request in odoo 12
- c# - 基本单元测试类最佳实践
- xamarin.forms - how to get the safearea thickness?
- google-apps-script - How to make Card Header Title bold in Gmail Add-on?