2016-05-05 58 views
0

残念ながら、httpからwebscoketにプロトコルをアップグレードしようとするとWinHTTPを使用してサーバーに接続しようとしていますが、API WinHttpSetOptionは失敗します。 GetLastErrorWinHTTPとWebsocket

ERROR_WINHTTP_INVALID_OPTION
12009というエラーコード12009を返すと、FALSE

hSessionHandle = WinHttpOpen(L"WebSocket sample",WINHTTP_ACCESS_TYPE_NO_PROXY,NULL, NULL,0); 
hConnectionHandle = WinHttpConnect(hSessionHandle, L"localhost",INTERNET_DEFAULT_HTTP_PORT, 0); 
hRequestHandle = WinHttpOpenRequest(hConnectionHandle,L"GET",L"/ws",NULL,NULL,NULL, 0); 

// Request protocol upgrade from http to websocket. 
fStatus = WinHttpSetOption(hRequestHandle,WINHTTP_OPTION_UPGRADE_TO_WEB_SOCKET,NULL,0); 
if (!fStatus) 
{ 
    dwError = GetLastError(); 
    goto quit; 
} 

fStatusリターン:WinHttpQueryOptionまたはWinHttpSetOptionへの要求は無効なオプション値を指定しました。

上記のコードはMicrosoft WinHttp WebSocket demonew GitHub home

私のシステムからのWindows 7は、OSがWindows 8以上である必要はないです取られますか?このAPIの手がかりはすべて失われますか?

+0

#include <beast/websocket.hpp> #include <beast/buffers_debug.hpp> #include <boost/asio.hpp> #include <iostream> #include <string> int main() { // Normal boost::asio setup std::string const host = "echo.websocket.org"; boost::asio::io_service ios; boost::asio::ip::tcp::resolver r(ios); boost::asio::ip::tcp::socket sock(ios); boost::asio::connect(sock, r.resolve(boost::asio::ip::tcp::resolver::query{host, "80"})); using namespace beast::websocket; // WebSocket connect and send message using beast stream<boost::asio::ip::tcp::socket&> ws(sock); ws.handshake(host, "/"); ws.write(boost::asio::buffer("Hello, world!")); // Receive WebSocket message, print and close using beast beast::streambuf sb; opcode op; ws.read(op, sb); ws.close(close_code::normal); std::cout << beast::debug::buffers_to_string(sb.data()) << "\n"; } 
、[ 'WinHttpWebSocketCompleteUpgrade'(https://msdn.microsoft.com/en-us/library/windows/desktop/hh707326(V = VS.85).aspxの) Windows 8を最小限のプラットフォームとして指定しています。私は先に進んで、Windows 8以上が必要です。 – WhozCraig

+0

ありがとう、WhozCraig .... Win 7でWinHttpでWebソケットを使用できる方法はありますか? – Sukhas

答えて

4

ここには、Windows 7で動作するヘッダーのみのC++ WebSocketライブラリがあります。例コードとドキュメントが付属しています: http://vinniefalco.github.io/

ここには、エコーサーバーにメッセージを送信する完全なプログラムがあります。これはWindows 7で動作します。明らかにアップグレード完了関数ので