c++ connection websocket poco-libraries

c++ - Conecte Websocket con bibliotecas Poco



connection poco-libraries (2)

El error "No encontrado" es el estándar HTTP 404 no encontrado devuelto por el servidor HTTP. Por lo general, significa que el recurso que está solicitando no existe.

Conseguí que tu código funcione cambiando el recurso de "/ws" a "/" :

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

y agregando la siguiente línea

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

antes de crear el nuevo WebSocket . Creo que es un par de encabezados que muchos (o todos) los servidores WebSocket esperan.

Estoy intentando conectarme a Echo Test Websocket utilizando las bibliotecas Poco C ++. Para hacerlo, aquí está mi código que debe configurar el Websocket:

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

Sin embargo, no funciona: recibo un mensaje de error como este:

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

¿Alguien puede ayudar?

Saludos cordiales


Si desea obtener una respuesta del servidor de eco, también debe asegurarse de usar una solicitud Http 1.1. Poco pasa a Http 1.0.

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

Este es un ejemplo completo,

#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(); } }