Winsockコントロールを使ったマルチキャスト通信方法とAPIの情報

このQ&Aのポイント
  • Winsockコントロールを使用してマルチキャスト通信を行いたい場合、UDPで通信することができます。
  • しかし、WinsockコントロールにはCの「setsockopt」に該当する命令がないため、APIを使用する必要があります。
  • APIの情報が見つからず困っている場合は、専門の情報を提供しているページを探すか、具体的な実装方法を知っている人に質問してみると良いでしょう。
回答を見る
  • ベストアンサー

Winsockコントロールを使用してマルチキャスト通信

まずは環境を WindowsXPSP2、VisualBasic6.0SP6です。 目的はサーバがマルチキャスト配信しているのを VBのクライアントがWinsockコントロールを使用して受信する方法を教えていただきたいのです。 Winsockコントロールを使用してUDPでの通信ができたのですが WinsockコントロールにはCの「setsockopt」に該当する命令が無い(わからない)のです。 Winsockコントロールで実現できないのであれば winsockのAPIを使用する方法でもかまわないのですが APIの情報も見つからず困っています。 APIを実装しても「IPPROTO_IP」「IP_ADD_MEMBERSHIP」などの定数の定義の情報がなくわからないのです。 これらの情報が載っているページや、解説しているページがあればお教えください。 または実装方法を知っておられるならお教えください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • saitoha
  • ベストアンサー率81% (9/11)
回答No.1

今、似たようなことをやっています。 ヘッダからとってきます。 ■プロトコル #define IPPROTO_IP 0 ■マルチキャスト winsockのバージョンによって異なる 1)version 1 winsock.hから #define IP_ADD_MEMBERSHIP 5 #define IP_DROP_MEMBERSHIP 6 2)version 2 WS2TCPIP.hから #define IP_ADD_MEMBERSHIP 12 #define IP_DROP_MEMBERSHIP 13 VBのWinsockコントロールのバージョンは知りません。 MFCのソケットクラス使ってたらversion1です。

ackapapa
質問者

お礼

情報ありがとうございます C++を別途インストールしWinsockヘッダファイルを参照することで 解決できました 質問する前はVBしかインストールできなかったので ヘッダ情報がなかったので質問させていただきました

関連するQ&A

  • Winsockコントロールにて・・・。

     Winsockコントロールでホスト名からIPアドレスを求めることはできたので、今度はIPアドレスからホスト名を取得しようと試みています。 APIを用いた場合、     ret =gethostbyname("ホスト名") でホスト名からIPアドレスを求めることができ、     ret =gethostbyaddr("IPアドレス",len,type) でIPアドレスからホスト名を取得することができるので、もしかしたらできるのでは?と思いチャレンジしていますがなかなか上手くいきません…。  やはりWinsockコントロールでは限界があるのでしょうか? ※環境はVisualBasic6.0 pro です。

  • WinSock API

    IP変換器を使用してRS-232C → 変換器 → PC を1本のLAN上で行う処理を考えています。 しかし、VBも通信もまったくの初心者でなにから手をつけてよいのかがわかりません。ご指導お願いします。 1.APIを使用してのPG作成  WinSock APIは WinSockコントロールとの違いは何でしょうか?  またWinSock APIを使用する場合、VBへの組み込み方法を教えてください。

  • rubyでマルチキャスト受信するには

    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)」となってしまい、実行できません。 なにか設定が必要なのでしょうか。

  • 現在WINSOCKコントロールを用いて通信プログラムを作成しています

    現在WINSOCKコントロールを用いて通信プログラムを作成しています サーバ側の設定が IP:192.168.1.10 Port:10000のとき、 Winsock.state = 7(Listen状態) クライアント側で Winsock.Close Winsock.RemoteHost = "192.168.1.10" Winsock.RemotePort = 10000 Winsock.Connect で実行したときにエラー10061で返ってきます。 NETSTAT -anで他にこのポートを使用ものは有りませんでした どのようにすればエラーが回避できますでしょうか?

  • Winsock で UDPパケットのデータロスト

    Winsockを使用して で UDP/IPパケット受信するアプリケーションを作成しましたが、Winsockで UDP/IPデータを取りこぼしています。何か回避手段や対策がありましたらお教えいただけないでしょうか よろしくお願いします

  • eMbeddedVBでのUDP通信プログラムの作成

    Windows CE(PocketPC2002)上で,UDPプロトコルの制御装置との通信プログラムを作成しております。 CEでのWINSOCKコントロールはUDPプロトコルを使用することができません。 このような場合,WINSOCKコントロール使用しないで作成する方法がありますでしょうか?。 それともeMbeddedVCであれば作成可能でしょうか?。ご経験の方がいらっしゃいましたら,ご教授願います。

  • [winsock]多分レベル低い質問です

    インターネット越しにマシン間でUDPのテストをすべく、 http://www.geekpage.jp/programming/winsock/udp.php の受信プログラムと送信プログラムをまるまるコピーして、その後送信プログラムをちょっといじりました。 まず setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(const char *)&TorF,sizeof(BOOL)); を追加し、 addr.sin_addr.S_un.S_addr = INADDR_BROADCAST; としました。 (TorF変数はBOOL型変数でTRUEで初期化してあります) そして送信プログラムと受信プログラムを別のマシン上に置いて、まず受信プログラムを起動して、送信プログラムを実行しましたが、受信側ではrecv関数待ちが続くだけで、いっこうにデータを受信できません。 備考: ローカルでテストを行ったところ、問題なく受信できました。 ブロードキャストでなく、直接IPを指定してマシン間で送受信をしても、やはりrecv関数でとまってしまいます。 そこで質問ですが、winsockを使用して別のPC間でUDP通信を行う場合、これ以外に設定が必要なのでしょうか。

  • Winsockのsendto関数のタイムアウトについて

    はじめまして。。。 Winsockのsendto関数を使用してユニキャストでUDP送信 しているのですが、LAN切断時等送信先がない場合、 3秒くらいsendto関数の応答が帰ってこなくて困っています。 setsockoptの「SO_SNDTIMEO」で送信タイムアウトを 設定してみたのですが、状況は変わりませんでした。 もし、LAN切断時でもすぐに応答が帰ってくる方法が ございましたらご教示頂けないでしょうか? 環境 OS:Windows XP 言語:.NET 2003 C++

  • winsockで複数のLANカードを使用するには

    winsock初心者です。 TCPまたはUDPにて1枚のLANカードで通信するプログラムはよくあるのですが 複数のLANカードで通信する場合の参考プログラムがありません。 具体的には, UDPクライアントを作成する場合,指定したLANカード(IPアドレス)に生成したsocketとリンクして通信させたいのです。 bind()のsockname.sin_addr.s_addrにてINADDR_ANYではなくカードに設定したIPアドレスを設定すればよいのでしょうか? 同じ疑問がTCPクライアント作成でもあります。 この場合bind()ではなく,connect()で送信したいカードに接続されるサーバー側のIPアドレスを指定するということでしょうか? また2枚のカードを使用する場合,同じネットワークアドレス(192.168.0.XXX)は使用しない方が良いのでしょうか?(UDPブロードキャストだと両カードで送信してしまう?) 色々調べてますがこれだという回答がみつかりません 誰かご存知でしたら御教示願います。

  • ExcelVBAでのwinsockの利用

    だいぶ以前に、VB6を使ってマニュアル片手にtcpやudpによるLAN内での双方向データ転送(チャットごっこ)ができるものを作った経験があります。 最近、Excel2010のVBAを使って当時のようなものを作ってみたいと考え、CQ出版の「VBAによるTCP/IPプログラミング入門」を購入しました。読んだ限りではなんとかなりそうに思ったのですが、その中で、「Winsockコントロールはプログラム開発し配布するためにはそのライセンスが必要でライセンスなしではWinsockコントロールを配置してダイアログを作成できない」という記述がありました。つまりはVB6などのライセンスがある環境でないと作り始めることができないようです。 幸いVB6はうちの古いパソコンに入っていますから、そちらに入っているExcelでWinsockコントロールを配置しただけのVBAファイルを作り、今のExcel2010に持って来て修正していくのであれば作業は可能らしいのですが、いずれは破棄するであろうパソコンに依存しないといけないという流れがしっくり来ません。 また、VB6を今の環境に移せば解決する話だとも思いますが、今後VBAは使ってもVB6を使うことはないだろうということと、容量等の事情から、できればこちらに入れるようなことはしたくありません。 必要に迫られてもいなく少々わがままな事情も合わせての話ですが、何か解決方法がありましたら提案・指摘などをお願いいたします。

専門家に質問してみよう