2017-02-15 15 views
0

我想创建应用程序,其中多个实例将运行在同一台机器上,他们将通过UDP通过相同的端口进行通信。与同一台PC上的多个应用程序实例的ACE - 只有第一个得到消息

我在StackOverflow上读到很多关于它应该是可能的线程。

虽然,当我打开从每个应用程序实例的连接我可以看到,每个实例发送消息,但只有第一个实例(如果第一闭合然后第二...)接收到的消息。

我正在使用ACE库进行通信。从代码摘录:

ACE_SOCK_Dgram_Mcast dgram; 
ACE_INET_Addr *listenAddress = new ACE_INET_Addr(12345, ACE_LOCALHOST); 
dgram.open(*listenAddress); 

ACE_INET_Addr peer_address; 
char buffer[1024]; 

dgram.send(buffer, 256); 

while (true) 
{ 
    if (dgram.recv(buffer, 256, peer_address, 0, &receiveLoopTimeout) != -1) 
    { 
     std::cout << "Received" << std::endl; 
    } 
} 

我还发现,如果我叫“dgram.join(*的ListenAddress)”然后我得到的错误,从应用程序的第一个实例代码ENODEV。

回答

1

我不知道我明白你正在尝试做的...发送消息的组播等等多个接收器得到它,或允许多个进程接收同一UDP端口单播......我猜前任的。

您正在使用ACE_SOCK_Dgram_Mcast类,但使用单播寻址和操作。所以只有一个实例会收到该消息。

查看ACE_wrappers/tests/Multicast_Test.cpp以获取如何发送和接收多播的示例。

+0

你好,我正试图做两个 - 发送消息,让多个接收器得到它+允许多个进程在同一个UDP端口上接收。出于测试目的,我只会将它发送给本地计算机,以测试它是否可以被多个进程接收。我会检查这个例子,谢谢。 – MiroJanosik

+1

哦,所以现在当我用一个dgram(12345,“10.10.0.255”)发送,另一个用(12345,ACE_LOCALHOST)接收时,我得到所有的消息。 – MiroJanosik

相关问题