我刚开始在C++中使用Poco,这是我不熟悉的慵懒.我似乎编译好了一切,但我不知道要包含哪些lib文件.我正在Eclipse CDT使用MingGW编译器(我甚至可以使用Poco吗?).当我查看Poco文件的lib目录时,我看到了这种情况:
PocoFoundationmd (Object file library)
PocoFoundationmdd (VC++ minimum rebuild de...)
PocoFoundationmdd (Object File Library)
pocoFoundationmdd (Program debug database)
PocoFoundationmt (Object file library)
PocoFoundationmtd (VC++ minimum rebuild de...)
PocoFoundationmtd (Object File Library)
pocoFoundationmtd (Program debug database)
Run Code Online (Sandbox Code Playgroud)
它为库的每个部分重复了相同的类型(我放在它们旁边的东西)(Foundation,Net,Util ......)
我目前正在使用一些c ++代码中的Poco Logger库.它在美国的服务器上运行,但即使系统时间存在正确的时区,日志文件也会将时间戳打印为GMT.
这是一个可配置的Poco设置,还是我需要找到的系统设置?我似乎无法在任何地方找到答案!
下面可能有用的输出.
日志文件示例:2013-04-03 11:49:32.862 GMT[31015]:Debug:...
日志文件格式字符串:pattern = "%Y-%m-%d %H:%M:%S.%i %Z[%P]:%p:%t"
输出来自/etc/sysconfig/clock:
ZONE="America/Los_Angeles"
UTC=true
ARC=false
Run Code Online (Sandbox Code Playgroud)
输出自date:Wed Apr 3 04:57:44 PDT 2013
输出echo $TZ:America/Los_Angeles
任何想法非常感谢!
我编写了一个简单的分层json-parser,使用POCO JSON,用作sax解析器.如果我使用字符串或流作为解析方法的输入,请参阅下面的调用,或者是不同的构造函数等效,它们在结果中是否存在差异?
Parser parser;
DefaultHandler handler;
parser.setHandler(&handler);
parser.parse(input);
Run Code Online (Sandbox Code Playgroud)
在内存消耗,速度等方面?
不知道我是否使用错了,因为这不是我真正的专业领域,但是我给我的印象是,这应该给我一个完整的解码的openframeworks缓冲区(或者一个简单的字符串,我尝试了各种方法也都得到了相同的结果)短字符串):
string str; // string is a line from a file handle and shows to be ok in the debugger
istringstream istr(str);
Poco::Base64Decoder b64in(istr);
ofBuffer buffer;
b64in >> buffer;
Run Code Online (Sandbox Code Playgroud)
现在我正在解码的示例base64字符串是这一行:
I2J1bmRsZQAAAAAAAAAAAQAAABwvT1NDL1NwYWNlSW50ZW5zaXR5ACxmAAA6nUlSAAAAFC9PU0MvU3BlZWQAACxmAAA90/fPAAAAGC9PU0MvU21vb3RobmVzcwAsZgAAP2Wu5gAAABQvT1NDL1JlYWNoAAAsZgAAPnxQSAAAABgvT1NDL0RlbnNpdHkAAAAALGYAAAAAAAAAAAAYL09TQy9Db2hlcmVuY2UAACxmAAA+tYEGAAAAIC9PU0MvVHJhdmVsSW50ZW5zaXR5AAAAACxmAAA8eQlsAAAAFC9PU0MvUmh5dGhtACxmAAA+6LQ5AAAAGC9PU0MvSGFybW9ueQAAAAAsZgAAPui0OQAAABQvT1NDL0VuZXJneQAsZgAAPYznBA==
Run Code Online (Sandbox Code Playgroud)
该行无法解析为简单的ascii文本,而是由某些vvvv修补程序在base64中转储的原始osc数据包,我无法访问...所以我想这也可能是编码问题?
而且我得到的所有输出,无论我使用流式复印机还是像上面的运算符,都只是“ #bundle”。这可能与“ #bundle”之后的/字符或其他非标准内容有关吗?我的印象是,Base64Decoder不在乎空白或在解码数据中找到的任何内容。
我是POCO的新用户,可以在HTTP :: Request之后获得HTTP响应.
顺便说一句,如何使用一些参数创建HTTP请求?例如,我想设置URI,http://xxxx/index.html?name = hoge&id = fuga&data = foo.
当然我知道如果我直接设置这个uri是可能的.但我想在下面实现这一点.有谁知道这种方式?
URI uri("http://xxx/index.html");
uri.setParam("name", "hoge");
uri.setParam("id", "fuga");
uri.setParam("data", "foo");
Run Code Online (Sandbox Code Playgroud) 我正在MinGW32下构建POCO库1.6.0,环境:Windows 7 Ultimate 32位,shell:MSYS.成功执行./configure.
$ ./configure
Configured for MinGW
Run Code Online (Sandbox Code Playgroud)
config.make的内容:
POCO_CONFIG = MinGW
POCO_BASE = /c/dev/poco
POCO_BUILD = /c/dev/poco
POCO_PREFIX = /usr/local
POCO_FLAGS =
OMIT =
export POCO_CONFIG
export POCO_BASE
export POCO_BUILD
export POCO_PREFIX
export POCO_FLAGS
Run Code Online (Sandbox Code Playgroud)
启动mingw32-make之后我得到了:
$ mingw32-make --debug -w
GNU Make 3.82
Built for i386-pc-mingw32
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO …Run Code Online (Sandbox Code Playgroud) 由于某种原因,调用signal.notify_one()会阻止当前线程并且不会返回.我从来没有听说过这种行为,我不知道如何解决它.
{
std::lock_guard<std::mutex> lock(_mutex);
_exit = true; // _exit is a std::atomic<bool>
}
std::cout << "before" << std::endl;
_signal.notify_one();
std::cout << "after" << std::endl;
_thread.join();
Run Code Online (Sandbox Code Playgroud)
我正在使用Microsoft Visual C++ 2015,并且在销毁期间调用上面的代码.
我希望你能指出我正确的方向,非常感谢你的帮助!
c++ multithreading condition-variable poco-libraries visual-studio-2015
尝试使用JSON将POST方法发送到服务器。但是,服务器也需要model, platform and platform version作为标头来请求。如何将这些标头添加到HTTPRequest。在邮递员处,我可以将其添加到“标题”选项卡中。例如。Model: Redmi 4 Platform: android。随时进行编辑以使其他人清楚。下面是我的代码HTTPRequest创建者:
Poco::JSON::Object obj;
obj.set("login", "log123");
obj.set("password","pas123");
Poco::Net::HTTPClientSession session("http://hostAddress",
80); //giving host name and port number
Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_POST,
"http://requestAddress","1.1"); //initializing request body
Poco::Net::HTTPResponse response;
std::stringstream ss;
obj.stringify(ss);
request.setContentType("application/json");
request.setContentLength(ss.str().length());
std::ostream& oStream = session.sendRequest(request);// sends request, returns open stream
obj.stringify(oStream);
std::istream& iStream = session.receiveResponse(response);
Run Code Online (Sandbox Code Playgroud)
我试图在https://pocoproject.org/docs/Poco.Net.HTTPRequest.html上找到一些信息。https://pocoproject.org/docs/Poco.Net.HTTPMessage.html。但是没有结果。
我对 poco 有一个奇怪的问题。我可以很好地构建它,并将其链接到测试应用程序。但是,当我下载一个 url 时,无论我使用什么 url,它都会报告 HostNotFound 异常。该文件可以在任何地方的隐身浏览器中访问,并且可以在 dns 中解析......我对解决这个问题感到有些茫然......有什么想法吗?
// 机器上的 dns 显示错误 nslookup s3.amazonaws.com 服务器:未知地址:192.168.0.1
非权威回答:名称:s3-1.amazonaws.com 地址:72.21.215.196 别名:s3.amazonaws.com s3.a-geo.amazonaws.com
// calling helper
CString host("http://s3.amazonaws.com");
CString path("/mybucket.mycompany.com/myfile.txt");
CString errmsg;
CString data = GetURL(host,path,errmsg);
// poco helper code
CString GetURL(CString host, CString path_query, CString &debmsg)
{
debmsg = CString("");
try
{
// convert request
std::string tmphost((LPCTSTR)host);
std::string tmppath((LPCTSTR)path_query);
// creation session and request
HTTPClientSession session(tmphost,80);
// disable proxy
session.setProxyHost("");
HTTPRequest req(HTTPRequest::HTTP_GET,tmppath,HTTPMessage::HTTP_1_1);
// send request
session.sendRequest(req);
// get response
HTTPResponse res; …Run Code Online (Sandbox Code Playgroud) 我正在编写一个与POCO C++库动态链接的C++库.我广泛使用POCO来做几件事,比如套接字,文件处理,日志记录等.所以,我需要处理POCO可以抛出的异常.
除了与POCO相关的异常之外,我的代码可以抛出其他异常,原因有几个(基本上是RunTime异常).POCO C++实际上包含一个RunTimeException类.所以,我可以使用它.
我的问题是:我是否应该依赖POCO异常,并允许使用我的库的第三方直接捕获它们?另一种选择是创建我自己的异常集,包装POCO异常,并公开它们.这样,如果我决定将来摆脱POCO,我不需要改变那部分.只是我的包装异常.
还有其他没有明显的理由用我自己的POCO例外包装所有的POCO例外吗?
提前谢谢了.
我正在使用一个简单的Get请求来从服务器获取通知.我希望请求持续到服务器收到响应(可能是1到9个小时).但我面临2分钟内请求超时的问题.我将会话和请求都设置为"keepalive".但它没有帮助.我也尝试过使用setKeepAliveTimeout并给它一个很大的值.但这也没有改变任何东西.以下是我使用的代码:
try{
//Prepare request
Poco::URI uri(url);
const Poco::Net::Context::Ptr context = new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, "", "", "", Poco::Net::Context::VERIFY_NONE, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort(), context);
session.setKeepAlive(true);
// prepare path
std::string path(uri.getPathAndQuery());
if (path.empty())
{
path = "/";
}
// send request
Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_GET, path, Poco::Net::HTTPMessage::HTTP_1_1);
req.setKeepAlive(true);
session.sendRequest(req);
// Get response
Poco::Net::HTTPResponse res;
//Get status code
statusCode = res.getStatus());
//Get status
status = res.getReason();
//Get body
std::istream &inStream = session.receiveResponse(res);
std::ostringstream outStringStream;
outStringStream << inStream.rdbuf();
response = outStringStream.str();
}
catch(Poco::Exception& exception)
{
cout<<exception.displayText(); …Run Code Online (Sandbox Code Playgroud) 我必须要说的第一件事是,这篇文章的灵感来自[Remy Lebeau] [1] /sf/users/4610441/的回答,这里的问题是:
我正在使用poco库和C ++。
目的是通过互联网发送一些大的二进制文件。因此,为了完成此操作,我使用以下消息头:
class FileDesc
{
size_t file_size = 0;
size_t chunk_size = 0;
size_t file_name_len = 0;
char file_name[0];
public:
FileDesc(size_t file_sz, size_t buf_sz)
: file_size(ByteOrder::toNetwork(file_sz)),
chunk_size(ByteOrder::toNetwork(buf_sz)) {}
size_t get_file_size() const { return ByteOrder::fromNetwork(file_size); }
size_t get_chunk_size() const { return ByteOrder::fromNetwork(chunk_size); }
string get_file_name() const
{
const auto len = get_file_name_len();
string ret; ret.reserve(len + 1);
for (size_t i = 0; i < len; ++i)
ret.push_back(file_name[i]);
return ret;
} …Run Code Online (Sandbox Code Playgroud)