2015-04-12 82 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