Hubungkan Websocket dengan perpustakaan Poco

Saya mencoba menyambung ke Echo Test Websocket menggunakan Pustaka Poco C++. Untuk melakukannya, inilah kode saya yang harus mengatur 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

Namun itu tidak berhasil: Saya menerima pesan kesalahan seperti ini:

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

Adakah yang bisa membantu?


person Moonlit    schedule 30.08.2013    source sumber
comment
Saya akan menanyakan hal itu di forum Poco   -  person Basile Starynkevitch    schedule 30.08.2013
comment
Saya melakukan itu, tetapi tidak ada bantuan :/   -  person Moonlit    schedule 02.09.2013


Jawaban (2)


Kesalahan 'Tidak Ditemukan' adalah standar HTTP 404 Tidak Ditemukan yang dikembalikan oleh server HTTP. Biasanya ini berarti sumber daya yang Anda minta tidak ada.

Saya membuat kode Anda berfungsi dengan mengubah sumber daya dari "/ws" menjadi "/":

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

dan menambahkan baris berikut

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

sebelum membuat WebSocket baru. Saya rasa ini adalah pasangan header yang diharapkan oleh banyak (atau semua?) server WebSocket.

person Kevin H. Patterson    schedule 14.11.2013

Jika Anda ingin mendapatkan balasan dari server gema Anda juga harus memastikan untuk menggunakan permintaan Http 1.1. Poco defaultnya adalah Http 1.0.

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

Ini adalah contoh lengkapnya,

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

}
person Olof    schedule 14.11.2014