異なる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です)には、伝送に問題がありますか?いいえ、それは私のデバイスですか?
または、私の小さなデバイスを洪水せずに、この問題を解決する方法はありますか?
デバイスがマルチキャストグループに参加していません。スニペットからその部分を省略しましたか? – Artefacto
はい、スニペットは素敵な自蔵サンプルでした。 – Illishar
RTOSデバイスから 'netstat -rn'と' ifconfig'(またはそれに相当するもの)を投稿してください。 –