【发布时间】:2017-02-15 15:28:06
【问题描述】:
我正在尝试创建多个实例将在同一台机器上运行的应用程序,它们将通过同一端口通过 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。
【问题讨论】: