2017-02-15 3 views
0

を取得します。ACEは - のみ最初、私は複数のインスタンスが同じマシン上で実行され、彼らは同じポートを経由して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を取得することが分かりました。

答えて

1

私は私が何をしようとする理解していない...ので、複数の受信機がそれを得るメッセージのマルチキャストを送ったり、複数のプロセスが同じUDPポートユニキャストで受信することができます...私は推測しています前者。

あなたはACE_SOCK_Dgram_Mcastクラスを使用しますが、ユニキャストアドレスし、事業をしています。そのため、1つのインスタンスだけがそのメッセージを受信します。

は、マルチキャストを送受信する方法の例については、/ Multicast_Test.cpp ACE_wrappers /テストを確認してください。

+0

こんにちは、私は両方をやろうとしています - 複数の受信者がそれを取得し、複数のプロセスが同じUDPポートで受信できるようにメッセージを送信してください。テスト目的のために、複数のプロセスで受信できるかどうかをテストするためにローカルコンピュータにのみ送信します。私はその例を確認します、ありがとう。 – MiroJanosik

+1

ああ、今では(12345、 "10.10.0.255")を送信用に使用し、もう1つを(12345、ACE_LOCALHOST)受信用に使用すると、すべてのメッセージが取得されます。 – MiroJanosik

関連する問題