WinXP、ruby1.8.6環境で、マルチキャスト受信するプログラムを作ろうと思い、Webの情報を探して以下のようにしてみました。
require "socket"
require "ipaddr"
s = UDPSocket.open()
s.bind("0.0.0.0", 10000)
mreq = IPAddr.new("X.X.X.X").hton + IPAddr.new("0.0.0.0").hton
s.setsockopt(Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, mreq)
p s.recv(65535)
s.close
X.X.X.Xはマルチキャストアドレスです。しかし、これを実行すると、「uninitialized constant Socket::IP_ADD_MEMBERSHIP (NameError)」となってしまい、実行できません。
なにか設定が必要なのでしょうか。
No.1ベストアンサー
- 回答日時:
少なくともWindows版のものではIP_ADD_MEMBERSHIPは定義されてないようです。
irb(main):016:0> Socket.constants.grep(/IP/)
=> ["AF_IPX", "IPPROTO_MAX", "IPPROTO_ICMP", "IPPROTO_UDP", "PF_IPX", "IPPORT_RESERVED", "IPPROTO_IGMP", "IPPROTO_IDP",
"IPPORT_USERRESERVED", "IPPROTO_GGP", "IPPROTO_ND", "IPPROTO_TCP", "IPPROTO_RAW", "IPPROTO_IP", "IPPROTO_PUP"]
Winsockコントロールを使用してマルチキャスト通信 - 教えて!goo
http://oshiete1.goo.ne.jp/qa2176336.html
この辺を見ると自分でがんばるしかないんじゃないでしょうか
早速の回答ありがとうございます。引用していただいたURLを見ると、Winsockヘッダファイルを参照させて解決していたとのことですが、rubyでも同じようなことができるのでしょうか。
また、IP_ADD_MEMBERSHIPの定義は5か12だろうと思われたので、setsockoptに直接指定してみましたが、
s.setsockopt(Socket::IPPROTO_IP, 5, mreq)とすると以下のエラー
「'setsockopt':getsockoptまたはsetsockoptの呼び出しで指定されたオプションまたはレベルは、不明か、無効か、あるいはサポートされていません。(Errno::ENOPROTOOPT)」、
s.setsockopt(Socket::IPPROTO_IP, 12, mreq)とすると以下のエラー
「'setsockopt':要求したアドレスのコンテキストが無効です。(Errno::EADDRNOTAVAIL)」
となってしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Ruby Ruby / passenger のインストールについて 1 2023/01/30 18:31
- Ruby Ruby on Railsでサーバーを立ち上げるには 1 2022/08/28 16:16
- ドライブ・ストレージ B550M Pro4マザーにM.2_SSD取付に関して 2 2023/04/15 02:07
- CPU・メモリ・マザーボード DELL Vostro 3268に付けられるCPUを教えてください。以下にspecを載せてます。 4 2022/10/24 11:19
- その他(開発・運用・管理) Windows serverでマルチキャスト通信の確認をしたいです。MicrosoftよりMPING 1 2023/03/31 01:05
- プロバイダー・ISP リモートデスクトップ時にサーバから見えるIPについて 2 2022/09/23 18:54
- ハッキング・フィッシング詐欺 webサイトでIPアドレスを抜く方法を聞きたいです。 1 2022/06/09 17:33
- UNIX・Linux raspberry piを使ったWebサーバー制作をしています、接続するネットワークを変更したときに 1 2023/01/09 15:57
- CPU・メモリ・マザーボード Socket AM4マザーに、レガシーなインタフェースが多数あるのはなぜ? 3 2023/02/17 10:47
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パソコンのスクリーンセーバー...
-
エクセルVBA、ステップモードと...
-
VB.NETを実行するにはどうした...
-
動的ライブラリ中のグローバル変数
-
C言語再帰アルゴリズム
-
WindowsVistaでの三国志9起動...
-
実行中のVBSをタスクバーに非表...
-
プログラム実行中に強制停止さ...
-
管理者として実行を毎回すると...
-
Windows10 で青鬼を遊びたいの...
-
jbossとjdkの関係性、違いにつ...
-
パソコンに何かが勝手にダウン...
-
ExcelVBA プログラムがカットさ...
-
pythonの常時実行
-
VB.NETでボタンのクリックイベ...
-
シングルステップの使用方法に...
-
chatGPTで次々と質問をしていく...
-
Excel実行時エラー-2146959355?
-
PC版のMinecraftが応答なしにな...
-
EXCEL-VBAでコマンド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パソコンに何かが勝手にダウン...
-
パソコンのスクリーンセーバー...
-
Excel実行時エラー-2146959355?
-
chatGPTで次々と質問をしていく...
-
PC版のMinecraftが応答なしにな...
-
VSコード
-
プログラミングについてです。...
-
latexでのエラー
-
VB.NETでボタンのクリックイベ...
-
管理者として実行を毎回すると...
-
エクセルVBA、ステップモードと...
-
Windows10 で青鬼を遊びたいの...
-
eclipseで、「ポート番号が使用...
-
EXCEL-VBAでコマンド...
-
プログラム実行中に強制停止さ...
-
VB.NETでDataTableにデータ追加...
-
pythonで他のアプリを操作する...
-
COBOLで集団項目から符号...
-
実行中のVBSをタスクバーに非表...
-
C言語再帰アルゴリズム
おすすめ情報