2015-04-12 70 views
0

我卡住了,我需要帮助。无法发送图像文件(图像/ jpg)使用Winsock WSABUF

我正在尝试编写正确的代码以发回图像文件,以便网络浏览器可以呈现它。它可以发回文本/ HTML就好了,但图像/ *不起作用。

您可以看到下面显示的代码和URL。

https://github.com/MagnusTiberius/iocphttpd/blob/master/iocphttpl/SocketCompletionPortServer.cpp

什么浏览器接收的图像数据的只有几个字节。

我试过vector,std :: string和const char *来设置WSABUF的值,但仍然发送相同的几个字节。

请让知道什么是缺少的作品,使这一个工作。

在此先感谢。

+0

尝试base 64编码? –

+0

我会读到大约64个编码,看看是否会让我前进。我将在实施和测试后回复。 – benG

+0

@brian,我没有读到base64编码,我从另一个线程复制了两个文件(base64.h和base64.cpp)。我会回复。 – benG

回答

1

这是你的问题:

PerIoData->LPBuffer = _strdup(str.c_str()); 

_strdup功能只复制,直到第一个空,所以它不能被用来拷贝二进制数据。如果您不想使用C++库,请考虑使用mallocmemcpy

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

vector<char> * vc = new vector<char>; 
+0

感谢您的评论,修复了错误。请参阅URL以了解我所做的修复。 https://github.com/MagnusTiberius/iocphttpd/blob/9f1ab247e7e7dd007c9f8382701e4beaf682224f/iocphttpl/SocketCompletionPortServer.cpp – benG