Poco组播对示例

时间:2014-05-21 17:34:12

标签: c++ poco-libraries

我有这两个poco程序,一个发送另一个接收。接收不会崩溃,但我无法让发送工作。可悲的是,这个例外也不是很有帮助,只是说"净例外"。它可能与在同一台机器上运行这两个程序有关,但仍然,重用地址设置为true,环回也是如此。

//Receive
#include <string>
#include <iostream>

// MulticastSocket receive example
#include <Poco/Net/SocketAddress.h>
#include <Poco/Net/MulticastSocket.h>

using namespace std;

int main(int argc, char* argv[])
{
    Poco::Net::initializeNetwork();

    std::cout << "1" << std::endl << std::flush;

    //Poco::Net::SocketAddress localAddr(Poco::Net::IPAddress(), 1900);
    Poco::Net::SocketAddress localAddr("239.255.255.250", 1900);

    std::cout << "2" << std::endl << std::flush;

    Poco::Net::MulticastSocket socket(localAddr, true);

    std::cout << "3" << std::endl << std::flush;

    socket.setLoopback(true);

    std::cout << "4" << std::endl << std::flush;

    socket.setTimeToLive(4);

    std::cout << "5" << std::endl << std::flush;

    Poco::Net::SocketAddress groupAddr("239.255.255.250", 1900);

    std::cout << "6" << std::endl << std::flush;

    socket.joinGroup(groupAddr.host());

    std::cout << "7" << std::endl << std::flush;

    Poco::Net::SocketAddress sender;
    char buffer[512];
    int n = socket.receiveFrom(buffer, sizeof(buffer), sender);

    std::cout << buffer << std::endl << std::flush;

    Poco::Net::uninitializeNetwork();

    return 0;
}

//Send

#include <string>
#include <iostream>

#include <Poco/Net/SocketAddress.h>
#include <Poco/Net/MulticastSocket.h>
#include <Poco/Net/NetException.h>

using namespace std;
using namespace Poco;

int main(int argc, char* argv[])
{
    Poco::Net::initializeNetwork();

    try
    {
        Poco::Net::SocketAddress address("239.255.255.250", 1900);
        //Poco::Net::SocketAddress address(Poco::Net::IPAddress(), 1900);

        std::cout << "1" << std::endl << std::flush;

        Poco::Net::MulticastSocket socket(address, true);

        std::cout << "2" << std::endl << std::flush;

        socket.setLoopback(true);

        std::cout << "3" << std::endl << std::flush;

        //Poco::Net::SocketAddress sender;
        char buffer[512];
        buffer[0] = 'H';
        buffer[1] = '\0';

        std::cout << "Sending " << buffer << std::endl;

        //socket.sendTo(buffer, 512, sender);
        socket.sendBytes(buffer, 512, 0);

        std::cout << "4" << std::endl << std::flush;
    }
    catch(const Poco::Net::NetException& ex)
    {
        std::cout << ex.what() << std::endl << std::flush;
    }

    Poco::Net::uninitializeNetwork();

    return 0;
}

1 个答案:

答案 0 :(得分:0)

您必须绑定到计算机的IP而不是组播组的IP。你已经评论了正确的路线:

Poco :: Net :: SocketAddress localAddr(Poco :: Net :: IPAddress(),1900);

尝试查看Poco附带的MulticastEchoServer示例。它位于源中的Net / testsuite / src / MulticastEchoServer.cpp下。