2011-10-27 3 views
2

異なるIP範囲から送信されたマルチキャストudpメッセージに応答するにはどうすればよいですか?
私はシンプルなSLPサーバー(http://www.openslp.org/doc/rfc/rfc2608.txt)を小さなデバイスと単純なSLPクライアントでPCに実装しました。

デバイスにはipがあります。例えば。 10.0.0.50
ただし、PCにはいくつかのipsがあります。例えば。 10.0.0.70,192.168.1.70,172.19.1.70
また、PCには複数のネットワークアダプタがあり、それぞれに複数のipsがあります。 (それを気にしない。)私はSLPマルチキャストグループへのUDPメッセージを送信し、PCから
範囲外マルチキャストへの応答

System.Net.Sockets.UdpClient client = new System.Net.Sockets.UdpClient(new System.Net.IPEndPoint(System.Net.IPAddress.Any, 0)); 
client.Send(m_tx_buffer, encoded, SLPMULTICASTGROUP, SLPPORT); 


の.NET UdpClientがUDPメッセージに添付するランダムなIPを選択します。
デバイスはudpメッセージを受信し、ユニキャストメッセージを指定された送信者のipに送り返します。以下のようなので:.NETは例えばを選択した場合

int mysock; 
struct sockaddr_in myaddr, cliaddr; 
char msgbuf[MAXLEN]; 
socklen_t clilen; 
int msglen; 
mysock = socket(PF_INET,SOCK_DGRAM,0); 
myaddr.sin_family = AF_INET; 
myaddr.sin_port = htons(S_PORT); 
myaddr.sin_addr = htonl(INADDR_ANY); 
bind(mysock, &myaddr, sizeof(myaddr)); 
while (1) { 
    len=sizeof(cliaddr); 
    msglen=recvfrom(mysock,msgbuf,MAXLEN,0,cliaddr,&clilen); 
    sendto(mysock,msgbuf,msglen,0,cliaddr,clilen); 
} 


問題があります。 ip 192.168.1.70。デバイスはこれに応答します。そしてそれはPCに通じていないようです。 (PCとデバイスは10.0.0.xの範囲を共有しています)
通過する予定ですか? (私はWiresharkでメッセージがPCに届いていないことを確認しましたが、デバイスがメッセージを送信していることを確認しました)

これを解決するために、PCにすべてのipsいくつかのudpメッセージを送信します。しかし、これはやや悪い性能を持ち、貧弱なデバイスに氾濫する危険性があります。

私のデバイス(小型のRTOS btwです)には、伝送に問題がありますか?いいえ、それは私のデバイスですか?
または、私の小さなデバイスを洪水せずに、この問題を解決する方法はありますか?

+0

デバイスがマルチキャストグループに参加していません。スニペットからその部分を省略しましたか? – Artefacto

+0

はい、スニペットは素敵な自蔵サンプルでした。 – Illishar

+0

RTOSデバイスから 'netstat -rn'と' ifconfig'(またはそれに相当するもの)を投稿してください。 –

答えて

0

デバイスが直接接続されたサブネットにないIPアドレスに送信できるようにするには、それらのIPアドレスのルートを与える必要があります。

PC(つまり、ゲートウェイが10.0.0.70のデフォルトルート)を使用してデフォルトルートを設定するだけで済みます。

+0

ゲートウェイを変更できるとします。現在はDHCPによって提供されています)、 "what"にはまだ問題があります。デバイス(recvfrom)は、PCを例えば、 192.168.1.70。それは実際には10.0.0.70であること、またはゲートウェイをこれに変更する必要があることを知ることはできませんか? – Illishar

+1

@Illiゲートウェイを変更する必要はありません。 「192.168.1.70/32へのパケットは10.0.0.70経由でルーティングされます」(「ip ra 192.168.1.70/32 via 10.0.0.70') – Artefacto

+0

@Illiもちろん、最良の解決策は、正確なインターフェイスを使用するか、ソケットを正しい送信元アドレスにバインドするだけです。 – Artefacto

関連する問題