2009-07-24 20 views
1

Qt &ネットワークソケットに関する質問があります。別のネットワークに複数のIPアドレスを持つコンピュータがある場合、特定のネットワークアダプタ/ IPアドレスでマルチキャストグループ用のudpソケットを開くにはどうすればよいですか。QtでマルチキャストグループのUDPソケットを開くにはどうすればよいですか?

例:IP 192.168.2.1172.20.0.1と私は172.20.0.1ネットワークアダプタでマルチキャストグループ228.5.6.7からパケットを受信ソケットを作成します。

+1

FWIW、ここでqtにバグをオープンしました:http://bugreports.qt.nokia.com/browse/QTBUG-8652 – Macke

答えて

3

下図のようにあなたはimr_interfaceにそれを設定する必要があります(おそらく、それは今INADDR_ANYに設定されています)

struct ip_mreq mreq; 
mreq.imr_multiaddr.s_addr = inet_addr("228.5.6.7"); 
mreq.imr_interface.s_addr = inet_addr("172.20.0.1");// <---- right here 
... 
QSocketDevice* sdev = new QSocketDevice(QSocketDevice::Datagram); 
... 
setsockopt(sdev->socket(), IPPROTO_IP, IP_ADD_MEMBERSHIP,(const char *)&mreq, sizeof(struct ip_mreq)); 
... 
+0

彼はQTネットワークモジュールを使用していて、rawオペレーティングシステムのソケットクロスプラットフォームアプリケーションを作成する場合、winsockのわずかな違いを保存します)。 – ewanm89

+2

ewanm89:Qtソケットを使用する方法です。 sdevはQSocketデバイスです。 QSocketDevice * sdev =新しいQSocketDevice(QSocketDevice :: Datagram); – Indy9000

0

それは、リスニングソケットの場合は、特定のIPアドレスにバインドするIPアドレスにバインドを使用することができます聞くために。 クライアントソケットの場合、OSは適切なインターフェイスを管理して、ルーティングテーブルのルールに従ってそのIPアドレスに到達するようにインターフェイスを作成します。

+0

はマルチキャストアドレスでは動作しません - それは私の問題です。 –

+0

yuriyの投稿を参照してください。http://www.qtcentre.org/forum/archive/index.php/t-3347.html QT APIでマルチキャストオプションを直接設定することはできません。 – ewanm89

関連する問題