与POCO GitHub问题重复

我正在Windows 10上使用Poco和Visual Studio 2015构建一个简单的Web服务器。

使用Web浏览器连接到此服务器几秒钟(约15秒)后,就会引发Poco :: Net :: NoMessageException。刷新页面后,它将再次发生;在每次连接后执行此操作。

我没有在文档,论坛,stackoverflow中找到任何东西。在文档中描述如何/何时/为什么从库内部产生这些异常将是非常有帮助的。

我还尝试了(只是为了好玩)std::cout << req.getURI() << std::endl;中的handleRequest(...),并在地址0x00000000处遇到了内存访问冲突,而函数中没有其他代码。

这是我的代码。
省略预处理程序语句。

MyApp.c

int main(int argc, char ** argv)
{
    myHTTPServer server;
    return server.run(argc, argv);
}


myHTTPRequestHandlerFactory

// Header
class myHTTPRequestHandlerFactory : public HTTPRequestHandlerFactory
{
    public:
        virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest&);
};

// Code
HTTPRequestHandler* myHTTPRequestHandlerFactory::createRequestHandler(const HTTPServerRequest& handler) {
    return new myHTTPRequestHandler;
}


myHTTPRequestHandler

// Header
class myHTTPRequestHandler : public HTTPRequestHandler
{
    public:
        virtual void handleRequest(HTTPServerRequest &, HTTPServerResponse &);
};

// Code
void myHTTPRequestHandler::handleRequest(HTTPServerRequest & request, HTTPServerResponse & response) {
    response.setStatus(HTTPResponse::HTTP_OK);
    //response.setContentLength(1024);
    //response.setChunkedTransferEncoding(true);
    std::ostream& out = response.send();
    out << "<html><head></head><body>POCO POCO POCO</body></html>";
    out.flush();
}


myHTTPServer

// Header
class myHTTPServer : public ServerApplication
{
    protected:
        int main(const std::vector<std::string>& v) {
            HTTPServer server(new myHTTPRequestHandlerFactory, ServerSocket(80), new HTTPServerParams);

            server.start();

            std::cout << "Server started" << std::endl;

            waitForTerminationRequest();

            std::cout << "Server stopped" << std::endl;

            server.stop();

            return Application::EXIT_OK;
        }
};

// No code in .c file


谢谢你的协助

最佳答案

根据this answer的说法,毫无例外地引发Poco :: Net :: NoMessageException异常是正常的POCO行为,您应该safely ignore将其异常。

对于内存访问冲突,这是正常现象,因为不允许在std::cout中调用HTTPRequestHandler::handleRequest(...)

关于c++ - 在HTTP/GET之后几秒钟引发Poco::Net::NoMessageException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37684593/

10-13 03:21