无法使用 Winsock WSABUF 发送图像文件 (image/jpg)
Cannot Send Image File (image/jpg) Using Winsock WSABUF
我被困住了,我需要帮助。
我正在尝试编写用于发送回图像文件的正确代码,以便 Web 浏览器可以呈现它。它可以发回 text/html 就好了,但是 image/* 不工作。
可以看到代码,URL如下图
https://github.com/MagnusTiberius/iocphttpd/blob/master/iocphttpl/SocketCompletionPortServer.cpp
浏览器接收的只是几个字节的图像数据。
我尝试了 vector、std::string 和 const char* 来设置 WSABUF 的值,但仍然发送了相同的几个字节。
请告知缺少的部分是什么才能使这一作品发挥作用。
提前致谢。
这是你的问题:
PerIoData->LPBuffer = _strdup(str.c_str());
_strdup
函数只复制到第一个null,所以不能用来复制二进制数据。如果您不想使用 C++ 库,请考虑使用 malloc
和 memcpy
。
备用实现(在 false
分支中)也是不正确的,因为它将数据保存在一个对象 (vc
) 中,该对象在 I/O 之前超出范围完全的。你可以改为做类似
的事情
vector<char> * vc = new vector<char>;
我被困住了,我需要帮助。
我正在尝试编写用于发送回图像文件的正确代码,以便 Web 浏览器可以呈现它。它可以发回 text/html 就好了,但是 image/* 不工作。
可以看到代码,URL如下图
https://github.com/MagnusTiberius/iocphttpd/blob/master/iocphttpl/SocketCompletionPortServer.cpp
浏览器接收的只是几个字节的图像数据。
我尝试了 vector、std::string 和 const char* 来设置 WSABUF 的值,但仍然发送了相同的几个字节。
请告知缺少的部分是什么才能使这一作品发挥作用。
提前致谢。
这是你的问题:
PerIoData->LPBuffer = _strdup(str.c_str());
_strdup
函数只复制到第一个null,所以不能用来复制二进制数据。如果您不想使用 C++ 库,请考虑使用 malloc
和 memcpy
。
备用实现(在 false
分支中)也是不正确的,因为它将数据保存在一个对象 (vc
) 中,该对象在 I/O 之前超出范围完全的。你可以改为做类似
vector<char> * vc = new vector<char>;