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