我正在尝试创建应用程序,其中多个实例将在同一台计算机上运行,并且它们将通过UDP通过同一端口进行通信。
我在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。
答案 0 :(得分:1)
我不确定我是否理解你要做的事情...发送消息多播,以便多个接收者获得它,或允许多个进程在同一个UDP端口单播上接收...我&#39;猜猜前者。
您正在使用ACE_SOCK_Dgram_Mcast类,但使用单播寻址和操作。因此,只有一个实例会收到该消息。
检查ACE_wrappers / tests / Multicast_Test.cpp,了解如何发送和接收多播的示例。