我直接从Poco网站示例文档中获取了此示例代码。它在达到“2”之前崩溃。不确定我做错了什么。
#include <string>
#include <iostream>
// DatagramSocket send example
#include <Poco/Net/DatagramSocket.h>
#include <Poco/Net/SocketAddress.h>
#include <Poco/Timestamp.h>
#include <Poco/DateTimeFormatter.h>
int main(int argc, char** argv)
{
Poco::Net::SocketAddress sa("localhost", 514);
std::cout << "1" << std::endl;
Poco::Net::DatagramSocket dgs(sa);
std::cout << "2" << std::endl;
std::string syslogMsg;
Poco::Timestamp now;
syslogMsg = Poco::DateTimeFormatter::format(now,
"<14>%w %f %H:%M:%S Hello, world!");
std::cout << "3" << std::endl;
dgs.sendBytes(syslogMsg.data(), syslogMsg.size());
std::cout << "4" << std::endl;
return 0;
}// DatagramSocket
答案 0 :(得分:2)
我能够在我的系统上重现崩溃。我添加了一些异常处理来查看问题是什么,看起来网络没有被初始化(因为我在Windows上这意味着WSAStartup没有被调用)。然后有一个例外,没有连接DatagramSocket。做出以下更改后,它对我有用。
#include <string>
#include <iostream>
// DatagramSocket send example
#include <Poco/Net/DatagramSocket.h>
#include <Poco/Net/SocketAddress.h>
#include <Poco/Timestamp.h>
#include <Poco/DateTimeFormatter.h>
#include <Poco/Net/NetException.h>
int main(int argc, char** argv)
{
try
{
Poco::Net::initializeNetwork();
Poco::Net::SocketAddress sa("localhost", 514);
std::cout << "1" << std::endl;
Poco::Net::DatagramSocket dgs;
dgs.connect(sa);
std::cout << "2" << std::endl;
std::string syslogMsg;
Poco::Timestamp now;
syslogMsg = Poco::DateTimeFormatter::format(now,
"<14>%w %f %H:%M:%S Hello, world!");
std::cout << "3" << std::endl;
dgs.sendBytes(syslogMsg.data(), syslogMsg.size());
std::cout << "4" << std::endl;
Poco::Net::uninitializeNetwork();
}
catch (const Poco::Net::NetException& e)
{
std::cerr << e.displayText() << std::endl;
}
return 0;
}// DatagramSocket
我不知道为什么这个例子没有按原样运作,但是Poco forums中的人可能会对它有所了解。