問題タブ [multicastsocket]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1211 参照

java - Java 8 ランタイムを使用すると MulticastSocket.setNetworkInterface() が大幅に遅くなるのはなぜですか?

次のプログラムを実行していますが、Java 7 ランタイムと比較して Java 8 ランタイムを使用すると、はるかに遅くなります。

これを Java 8 で実行すると、約 3500 ミリ秒かかります。Java 7 では、約 150 ミリ秒かかります。

次の Java バージョンを使用しています。

私は Windows 7、サービス パック 1 を使用しています。

私のマシンには 25 の異なるインターフェイス (多数の仮想インターフェイス) がありますが、各インターフェイスの操作にはほぼ同じ時間がかかります。

一部の呼び出しは失敗しますが、成功した呼び出しでも速度は遅くなります。興味深い事実は、失敗した操作のエラー メッセージが Java のバージョン間で異なることです。

Java7:

Java 8:

実行jstack中 次のスレッド スタックに最も多くの時間が費やされていることがわかります。

すべての Windows ファイアウォールを無効にしようとしましたが、違いはありませんでした。

プログラム自体はあまり意味がないかもしれませんが、この種のコードを実行するサードパーティのプラットフォームの問題をトラブルシューティングしようとしています。

この問題は、オフィス内の他のワークステーションでも再現可能です。

この動作を引き起こす可能性のあるアイデア、またはさらにトラブルシューティングする方法はありますか?

0 投票する
2 に答える
288 参照

c - C でのマルチキャスト: addrinfo を使用するとバイナリが受信されない

私は、2 つのほぼ同一のプログラムでこの面白い小さな問題を抱えています。私がやろうとしているのは、マルチキャストソケットでデータを送信して受信することです。今のところ、送信者がメッセージを受信すれば問題ありません (後で受信しないオプションを設定します)。

私は2つの実装ケースを持っています。最初のアプローチでは、sockaddr構造を初期化してからバインドし、同じソケットのマルチキャスト グループに参加する従来の方法を使用しています。ただし、これは IPv4/IPv6 に依存するため、これを回避するためaddrinfoに、プログラムの 2 番目のバリアントで構造体を使用しようとしました。両方のプログラムを以下に示します。

問題は、メッセージが最初のユースケースでsockaddr受信されていることです.2番目のケースではメッセージが受信されず、ソケット記述子が設定されていません。誰かが私を助けて、なぜこれが起こっているのか説明してもらえますか?

バリアント 1 (ありsockaddr)

バリアント 2 (ありaddrinfo)

0 投票する
1 に答える
1664 参照

ruby - 1 つのインターフェイスで複数のマルチキャスト グループに参加する方法

私が利用できる Ruby バージョンは 1.8.7 であり、現時点ですべての企業の Linux サーバーで使用されている標準イメージの一部であり、これらすべてのサーバーで実行できる必要があるため、アップグレードできません。問題なし(これが問題にならないことを願っています)

私が行っているプロジェクトは、現在 Windows で実行されているアプリケーションを Linux サーバー上で再作成することです。アプリケーションは、マルチキャスト グループとインターフェイスのリストを取得し、グループへの参加を試みます。次に、参加できるかどうか、データがそこにあったかどうかを報告するデータをリッスンします (内容は関係ありません)。サーバーに実際のソフトウェアを展開する前に、環境内でネットワーク接続を証明するのに役立ちます。受信するデータは、取引所からのバイナリ エンコードされた金融情報であるため、出力する必要はありません (したがって、コメント アウトされた行と出力)。

私はオンラインで読んだところ、コードの断片を見つけて、これを小さなバージョンにまとめました。このバージョンでは、1 つのインターフェイスにバインドされた 1 つのマルチキャスト グループに参加し、データが受信されたかどうかを報告する一定期間データをリッスンします。

次に、2 番目のマルチキャスト グループを追加したいと考えましたが、これを実現する方法についての理解が不足しています。私のコードは次のとおりです。

これを実行すると発生するエラーは次のとおりです。

[root@dt1d-ddncche21a ~]# ./UDPServer.rb ./UDPServer.rb:35:`setsockopt' 内: アドレスは既に使用されています (Errno::EADDRINUSE) from ./UDPServer.rb:35

それが私がいる場所であり、何が間違っているかについての最初のポインターで実際に行うことができます(できればコードを更新することで)。次に、この例が機能したら、次のステップはミックスに2番目のインターフェースを追加して聞くことです。再び複数のマルチキャスト グループ、

0 投票する
1 に答える
231 参照

ruby - 複数のマルチキャスト グループを同時に監視する方法

現在、Ruby 1.8.7 を使用して、ユーザーが構成したマルチキャスト グループとポートに基づいて、最大 2 つのインターフェイスでマルチキャスト データをチェックする Windows ツールの Linux バージョンを開発しています。

複数のマルチキャスト チャネルをリッスンする方法がわからないという以前の問題がありましたが、以前の質問から解決されました。

これが次の問題につながった。複数のマルチキャスト グループをリッスンする必要があります。

  • 特定のグループごとにデータが受信されたかどうかを判断し、データがあるグループとないグループを報告します

  • すべてのチャネルで同時に、ユーザーが構成可能なタイムアウト期間のデータをリッスンします。

マルチキャスト グループ、ポート、およびインターフェイスがすべてハード コードされている別のコードでこれを機能させようとしています。これを整理して理解したら、ユーザー入力と検証が既に完了しているメイン プログラムに移行します。 . 簡単なプログラム コードを更新したので、次のようになりました。

しかし、これにより、B ソケットにデータが存在しないために何も受信されないと報告されるという問題が発生しました。

これの理由は、2 番目の recvfrom がタイムアウトになり、そのためにコードのレスキュー部分になってしまうことだと理解しています。しかし、これは私の最初の Ruby プログラムであり、まだ学習中であるため、解決するために何をすべきかわかりません。

要するに、私は理解する必要があります:

  • そのソケットには 2 つのマルチキャスト グループがあるため、sockA のどのチャネル データが受信されたかを判断する方法

  • 構成可能な数のデータのマルチキャスト グループを同時に監視し、データの受信に 1 回失敗しても誤ったエラーが出力されないようにする方法

0 投票する
0 に答える
60 参照

c - Cプログラミングを使用してマルチキャストソケット接続を実装するにはどうすればよいですか

パケット ドロップに問題があります。udp パケットを取得するためにソケット接続を行っていますが、マルチキャスト ソケット接続に問題がある可能性があります。私を助けてください—私のコードは適切ですか?

0 投票する
1 に答える
40 参照

sockets - マルチキャスト ポート範囲の検証

クライアントサーバーコードを書く必要があります。クライアントは、複数のマルチキャスト アドレスからパケットを送受信できます。また、パケットを送受信する前に、それらの IP\ポート範囲の有効性を確認する必要があります。

を調べた RFC-5771 IANA Guidelines for IPv4 Multicast Address Assignmentsところ、マルチキャスト IP アドレスの範囲が見つかりました。

正当な (他のアプリケーションによって使用されていない) マルチキャスト ポートの範囲はどこで確認できますか?

ありがとう。