2013-08-30 2 views
3

Я пытаюсь подключиться к Echo Test Websocket, используя библиотеки C++ Poco. Для того, чтобы сделать это здесь мой код, который должен настроить WebSocket:Connect Websocket с библиотеками Poco

HTTPClientSession cs("echo.websocket.org"); 
HTTPRequest request(HTTPRequest::HTTP_GET, "/ws"); 
HTTPResponse response; 

WebSocket* m_psock = new WebSocket(cs, request, response); 
m_psock->close(); //close immidiately 

Однако это не работает: Я получаю сообщение об ошибке, как это:

Poco::Exception: WebSocket Exception: Cannot upgrade to WebSocket connection: Not Found 
Can

кто-нибудь помочь ?

вид касается

+1

Я хотел бы спросить, что на [Poco форуме] (http://pocoproject.org/forum/) –

+0

я сделал это, но не поможет : / – Moonlit

ответ

3

'Not Found' ошибка является стандартным HTTP 404 Not Found, возвращаемый сервером HTTP. Обычно это означает, что ресурс, который вы запрашиваете, не существует.

Я получил свой код, чтобы работать, изменяя ресурс из "/ws" в "/":

HTTPRequest request(HTTPRequest::HTTP_GET, "/"); 

и добавив следующую строку

request.set("origin", "http://www.websocket.org"); 

перед созданием нового WebSocket. Я думаю, что это пара заголовков, которые ожидают многие (или все?) Серверы WebSocket.

3

Если вы хотите получить ответ от эхо-сервера, вы также должны быть уверены, что используете запрос Http 1.1. Poco по умолчанию использует Http 1.0.

HTTPRequest request(HTTPRequest::HTTP_GET, "/",HTTPMessage::HTTP_1_1); 

Это полный пример,

#include "Poco/Net/HTTPRequest.h" 
#include "Poco/Net/HTTPResponse.h" 
#include "Poco/Net/HTTPMessage.h" 
#include "Poco/Net/WebSocket.h" 
#include "Poco/Net/HTTPClientSession.h" 
#include <iostream> 

using Poco::Net::HTTPClientSession; 
using Poco::Net::HTTPRequest; 
using Poco::Net::HTTPResponse; 
using Poco::Net::HTTPMessage; 
using Poco::Net::WebSocket; 


int main(int args,char **argv) 
{ 
    HTTPClientSession cs("echo.websocket.org",80);  
    HTTPRequest request(HTTPRequest::HTTP_GET, "/?encoding=text",HTTPMessage::HTTP_1_1); 
    request.set("origin", "http://www.websocket.org"); 
    HTTPResponse response; 


    try { 

     WebSocket* m_psock = new WebSocket(cs, request, response); 
     char *testStr="Hello echo websocket!"; 
     char receiveBuff[256]; 

     int len=m_psock->sendFrame(testStr,strlen(testStr),WebSocket::FRAME_TEXT); 
     std::cout << "Sent bytes " << len << std::endl; 
     int flags=0; 

     int rlen=m_psock->receiveFrame(receiveBuff,256,flags); 
     std::cout << "Received bytes " << rlen << std::endl; 
     std::cout << receiveBuff << std::endl; 

     m_psock->close(); 

    } catch (std::exception &e) { 
     std::cout << "Exception " << e.what(); 
    } 

} 
Смежные вопросы