如何为文本和箱缓冲区设置 WSABUF.buf
How Do I Set WSABUF.buf For Text And Bin Buffer?
我正在重构代码以不使用std::vector
不知何故,WSASend() 更喜欢让 WSABUF.buf 指向 std::vector
在测试过程中,image/* mimetypes 返回 net::ERR_CONTENT_LENGTH_MISMATCH。
byte* HttpResponse::GetResponse2(ULONG *len)
{
DWORD dwThreadId = GetCurrentThreadId();
char *buffer = (char*)malloc(DATA_BUFSIZE);
memset(buffer, 0, DATA_BUFSIZE);
std::vector<byte> binbuffer = m_sbResponse;
std::string ctstr;
ctstr.assign(contenType.begin(), contenType.end());
size_t siz = binbuffer.size();
std::string ssiz = std::to_string(siz);
strcpy_s(buffer, DATA_BUFSIZE, resp_ok);
strcat_s(buffer, DATA_BUFSIZE, "n");
strcat_s(buffer, DATA_BUFSIZE, "Date: ");
strcat_s(buffer, DATA_BUFSIZE, "May 10, 2015");
strcat_s(buffer, DATA_BUFSIZE, "n");
strcat_s(buffer, DATA_BUFSIZE, "Content-Type: ");
strcat_s(buffer, DATA_BUFSIZE, ctstr.c_str());
strcat_s(buffer, DATA_BUFSIZE, "n");
strcat_s(buffer, DATA_BUFSIZE, "Content-Length: ");
strcat_s(buffer, DATA_BUFSIZE, ssiz.c_str());
strcat_s(buffer, DATA_BUFSIZE, "n");
strcat_s(buffer, DATA_BUFSIZE, "n");
int bufsiz = strlen(buffer) + binbuffer.size() + 1;
byte* buffer2 = (byte*)malloc(bufsiz);
memset(buffer2, 0, bufsiz);
strcpy_s((char*)buffer2, strlen(buffer)+1, buffer);
int n = strlen((char*)buffer2);
std::vector<byte>::iterator it;
for (it = binbuffer.begin(); it != binbuffer.end(); it++)
{
byte b = *it;
buffer2[n++] = b;
}
*len = strlen((char*)buffer2);
return buffer2;
}
是否需要为 WSA* 设置属性才能与我尝试执行的操作一起使用?
该文件位于存储库中。
尝试更多类似的东西:
byte* HttpResponse::GetResponse2(ULONG *len)
{
*len = 0;
std::ostringstream oss;
oss << resp_ok << "n"
oss << "Date: " << "May 10, 2015" << "n";
oss << "Content-Type: " << contenType << "n";
oss << "Content-Length: " << m_sbResponse.size() << "n";
oss << "n";
std::string s = oss.str();
int bufsiz = s.length() + m_sbResponse.size();
byte* buffer2 = (byte*) malloc(bufsiz);
if (buffer2)
{
std::copy(s.begin(), s.end(), buffer2);
std::copy(m_sbResponse.begin(), m_sbResponse.end(), &buffer2[s.length()]);
*len = bufsiz;
}
return buffer2;
}
话虽如此,我强烈建议不要返回byte*
。 您的GetResponse()
方法将输出std::vector<byte>
作为参数,您确实应该坚持使用该模型:
void HttpResponse::GetResponse2(std::vector<byte> *pv)
{
pv->clear();
std::ostringstream oss;
oss << resp_ok << "n"
oss << "Date: " << "May 10, 2015" << "n";
oss << "Content-Type: " << contenType << "n";
oss << "Content-Length: " << m_sbResponse.size() << "n";
oss << "n";
std::string s = oss.str();
pv->reserve(s.length() + m_sbResponse.size());
std::copy(s.begin(), s.end(), std::back_inserter(*pv));
std::copy(m_sbResponse.begin(), m_sbResponse.end(), std::back_inserter(*pv));
}
相关文章:
- Vulkan 中的动态顶点缓冲区格式设置
- 在 Linux 中存储区域设置名称的缓冲区大小应该是多少?
- 设置缓冲区参数时CL_INVALID_ARG_VALUE
- Vulkan:为什么主命令缓冲区和辅助命令缓冲区都需要设置帧缓冲区和渲染过程
- GLSL 计算着色器 使用查找表设置缓冲区会导致不写入任何数据,与其他数据设置相同的缓冲区有效
- 通过行和列设置控制台屏幕尺寸和屏幕缓冲区
- 将ITOA与整数一起使用.设置缓冲区的限制
- 如何为文本和箱缓冲区设置 WSABUF.buf
- stringstream->rdbuf()->pubsetbuf 未设置缓冲区
- 如何在 Node.js 中设置最大缓冲区大小
- 谷歌协议缓冲区,如何设置自定义类型的字段
- GetDIBits 将图像缓冲区设置为所有 0(全黑)
- 正在将缓冲区/指针设置为null
- 如何确定/设置套接字缓冲区大小
- Qt - 如何设置音频播放从缓冲区的开头开始
- setsockopt() 在设置大套接字 recv 缓冲区时不返回错误
- 在谷歌协议缓冲区中设置重复字段时出错
- 当在emacs中设置断点时,源缓冲区被隐藏
- glGenBuffers 不设置缓冲区
- 如何在协议缓冲区中设置嵌套消息的字段