无法使用 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++ 库,请考虑使用 mallocmemcpy

备用实现(在 false 分支中)也是不正确的,因为它将数据保存在一个对象 (vc) 中,该对象在 I/O 之前超出范围完全的。你可以改为做类似

的事情
vector<char> * vc = new vector<char>;