我正在尝试使用Qt Creator中的poco库和poco附带的一个示例,我已经在Visual Studio 2012中使用它,但我在Qt Creator中不断出现构建错误.我的lib路径中有.dll和.lib.
这是我的.pro文件
TEMPLATE = app
CONFIG += console
CONFIG -= qt
SOURCES += main.cpp
INCLUDEPATH += C:\Users\justin\Downloads\poco-1.4.6\Net\include
INCLUDEPATH += C:\Users\justin\Downloads\poco-1.4.6\Foundation\include
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -lPocoFoundation
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -lPocoFoundationd
INCLUDEPATH += $$PWD/
DEPENDPATH += $$PWD/
win32:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/lib/PocoFoundation.lib
else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/lib/PocoFoundationd.lib
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -lPocoNet
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -lPocoNetd
INCLUDEPATH += $$PWD/
DEPENDPATH += $$PWD/
win32:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/lib/PocoNet.lib
else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/lib/PocoNetd.lib …Run Code Online (Sandbox Code Playgroud) 我正在尝试链接到POCO C++库的静态版本,如下所示:
g++ BCCMain.o -L$_POCO_LIBS -Wl,-Bstatic $_POCO_LIBS/libPocoFoundation.a $_POCO_LIBS/libPocoUtil.a $_POCO_LIBS/libPocoXML.a $_POCO_LIBS/libPocoJSON.a -Wl,-Bdynamic -o BCMain
Run Code Online (Sandbox Code Playgroud)
不幸的是,这给出了一些对符号的未定义引用的错误,例如:
Poco::Logger::get(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
Run Code Online (Sandbox Code Playgroud)
即使Poco::Logger::get(std::string const&)实际上是IS定义的libPocoFoundation.a.
现在,如果我尝试链接到基础库的共享版本,它可以工作:
g++ BCCMain.o -L$_POCO_LIBS -Wl,-Bstatic $_POCO_LIBS/libPocoFoundation.a $_POCO_LIBS/libPocoUtil.a $_POCO_LIBS/libPocoXML.a $_POCO_LIBS/libPocoJSON.a -Wl,-Bdynamic -lPocoFoundation -o BCMain
Run Code Online (Sandbox Code Playgroud)
lib的静态和共享版本具有相同的符号,因此我发现很难弄清楚我做错了什么.
Ubuntu的/ Linaro的.g ++ 4.6.3
我正在尝试使用Poco C++ 库连接到Echo Test Websocket。为此,我的代码应设置 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
Run Code Online (Sandbox Code Playgroud)
但是它不起作用:我收到如下错误消息:
Poco::Exception: WebSocket Exception: Cannot upgrade to WebSocket connection: Not Found
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
我想知道如何用C++中的POCO对URL进行请求(例如下载图片并保存)?
到目前为止,我得到了这个小代码
#include <iostream>
#include <string>
#include "multiplication.h"
#include <vector>
#include <HTTPRequest.h>
using std::cout;
using std::cin;
using std::getline;
using namespace Poco;
using namespace Net;
int main() {
HTTPRequest *test = new HTTPRequest("HTTP_GET", "http://www.example.com", "HTTP/1.1");
}
Run Code Online (Sandbox Code Playgroud) 我一直在查看 poco 示例和文档,但我找不到如何结合使用 poco 的 websockets 和 SSL。我成功地将非 SSL websocket(基于 WebSocket 类)连接到服务器(来自 Qt5.4 的 echoserver 示例,在 Ubuntu 上运行),但是如何将 SSL 添加到客户端我不知道。Poco 的NetSSL_OpenSSL 示例并不是那么有用,因为我不需要知道如何下载、推文、邮寄或编写时间服务器。后者也是唯一一个完全使用“SecureStreamSocket”对象的对象(这可能是我需要的类)。但是该示例只是从请求对象访问套接字,它没有显示如何正确创建和配置套接字。
我只想要一个 SSL websocket 客户端来发送和接收一些简单的消息,比如“Hello World”。有人可以帮我吗?
我对客户端的操作系统使用 Windows 7 64 位,对服务器的操作系统使用 VirtualBox 上的 Ubuntu 64 位,但服务器端没有问题。我的 poco 版本是 1.6.0,我用 Visual Studio 2013 Express 编译它。我也使用 OpenSSL 1.0.1j。
干杯
亚历克斯
我注意到许多Poco类都有一个受保护的析构函数.这使得编码更加烦人.例如,这里是我的一些代码:
struct W2: Poco::Util::WinRegistryConfiguration
{
typedef Poco::Util::WinRegistryConfiguration inherited;
using inherited::inherited;
};
std::string get_documents_folder()
{
W2 regc { "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders" };
return regc.getString("Personal", "");
}
Run Code Online (Sandbox Code Playgroud)
当然,如果我可以取消W2并且只是制造regc类型会更简单WinRegistryConfiguration.但由于受保护的析构函数,这是不可能的.
我意识到可以使用它Poco::AutoPtr,但是new当自动分配应该正常工作时,通过动态分配浪费资源.
我的问题是:这是什么原因,我忽略了什么?
我在 Poco 中编写了一个 HTTP 客户端,它将 POST 请求发送到 HTTPServer 以下是片段
Poco::Net::HTTPClientSession s("127.0.0.1", 9090);
Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_POST, "/echo");
std::string body("rs=this is a random request body");
request.setContentLength(body.length());
s.sendRequest(request) << body;
Run Code Online (Sandbox Code Playgroud)
服务器收到请求,但以下是我能找到的获取蒸汽的唯一方法(即 rs=this is a ....)
void SRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& hreq, Poco::Net::HTTPServerResponse& resp){
std::istream &i = hreq.stream();
Poco::StreamCopier::copyStream(i, ss, hreq.getContentLength());
}
Run Code Online (Sandbox Code Playgroud)
因此,获取客户端发送的内容的方法是使用字符串。有没有更简单/直接的方式来获取内容?
POCO 库支持 MySQL DATE、TIME 和 DATETIME 列,但不支持 TIMESTAMP。从 TIMESTAMP 列中选择值会引发“未知字段类型”异常,因为“Poco/Data/MySQL/ResultMetadata.cpp”不支持 MYSQL_TYPE_TIMESTAMP。
在我的项目中,我不得不将几列更改为 DATETIME 以使其工作。这不是一个大问题,我仍然想知道这个限制的原因是什么。如果我必须使用无法更改的现有数据库模式,我会遇到严重的麻烦。
时间戳列被广泛使用,因此我不相信它们被简单地省略了。时间戳列是否存在实现问题?有我可以使用的解决方法吗?未来是否计划为 POCO 添加 MySQL 时间戳支持?
我正在开发一个 http 服务器,作为我的 C++ 应用程序的一部分,基于 Poco::Net HTTP。它非常简单,使用Poco::Net::HTTPServer,然后Poco::Net::HTTPRequestHandler使用子类,实现void handleRequest(Poco::Net::HTTPServerRequest &req, Poco::Net::HTTPServerResponse &resp). 在这种方法中,进程可能会变得耗时,甚至在某些情况下可能会无休止地运行。
浏览器通过 ajax 请求 ( ) 从 Web 应用程序内部使用这些服务器XMLHttpRequest,有时还abort()通过这些请求(这会关闭连接?!)。
如何检测内部的这种情况handleRequest(...)以便停止处理?
顺便说一句:我确实需要这种流程。关于不同的、可能是异步的方式(例如传递数据)的建议将不起作用。如果 Poco 做不到,我就必须更换它。
文档和一些实验都没有Poco::Net::HTTPServerRequest帮助Poco::Net::HTTPServerResponse我。