幻灯片中的Poco示例崩溃了

时间:2014-05-17 01:20:34

标签: c++ poco-libraries

我直接从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

1 个答案:

答案 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中的人可能会对它有所了解。