【问题标题】:POCO websocket exceptionPOCO websocket 异常
【发布时间】:2019-04-29 07:45:23
【问题描述】:

我需要在 C++ 服务器和 Angular 客户端之间创建 WebSocket 通信。我使用了 POCO 库和 websocket 服务器 示例。我设法在服务器和客户端之间交换数据。

我的问题是当我更新网页(F5)时,服务器关闭了。

我应该处理什么异常?

class WebSocketRequestHandler : public HTTPRequestHandler
    /// Handle a WebSocket connection.
{
public:
    void handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
    {
        Application& app = Application::instance();
        try
        {
            WebSocket ws(request, response);
            app.logger().information("WebSocket connection established.");
            char buffer[1024];

        do
        {

        n = ws.receiveFrame(buffer, sizeof(buffer), flags); 

            cout << buffer << endl;

        } while (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE);

        app.logger().information("WebSocket connection closed.");

    }
    catch (WebSocketException& exc)
    {
        app.logger().log(exc);
        switch (exc.code())
        {
        case WebSocket::WS_ERR_HANDSHAKE_UNSUPPORTED_VERSION:
            response.set("Sec-WebSocket-Version", WebSocket::WEBSOCKET_VERSION);

        case WebSocket::WS_ERR_NO_HANDSHAKE:

        case WebSocket::WS_ERR_HANDSHAKE_NO_VERSION:

        case WebSocket::WS_ERR_HANDSHAKE_NO_KEY:

        response.setStatusAndReason(HTTPResponse::HTTP_BAD_REQUEST);
        response.setContentLength(0);
        response.send();
        break; 
        }
    }
    }
};

【问题讨论】:

    标签: c++ websocket poco-libraries


    【解决方案1】:

    我还在我的应用程序中捕获了Poco::Exception。它运行良好,没有崩溃:

    catch (WebSocketException& exception)
    {
        switch (exception.code())
        {
        case WebSocket::WS_ERR_HANDSHAKE_UNSUPPORTED_VERSION:
            response.set("Sec-WebSocket-Version", WebSocket::WEBSOCKET_VERSION);
            // No break, fall through
        case WebSocket::WS_ERR_NO_HANDSHAKE:
        case WebSocket::WS_ERR_HANDSHAKE_NO_VERSION:
        case WebSocket::WS_ERR_HANDSHAKE_NO_KEY:
            response.setStatusAndReason(HTTPResponse::HTTP_BAD_REQUEST);
            response.setContentLength(0);
            response.send();
            break;
        }
    }
    catch (Poco::Exception& exception)
    {
        _logger.error("[%s] handle request {%s}", caller(), exception.displayText());
    }
    

    【讨论】:

      猜你喜欢
      • 2013-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      相关资源
      最近更新 更多