如何響應從不同ip範圍發送的多播udp消息?
我有一個場景,我在PC上的一個小設備和一個簡單的SLP客戶端上實現了一個簡單的SLP服務器(http://www.openslp.org/doc/rfc/rfc2608.txt)。
該設備有一個IP。例如。 10.0.0.50
但是PC有幾個ips。例如。 10.0.0.70,192.168.1.70,172.19.1.70
PC也有幾個網絡適配器,每個都有幾個ips。 (沒關係。)
從PC我送出去的UDP報文到SLP多播組:響應超出範圍的多播
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將選擇一個隨機的IP附加到UDP報文。
設備將接收udp消息並將單播消息發送回給定的發送方ip。像這樣:
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);
}
問題是如果.NET選如。 IP 192.168.1.70。該設備將對此作出響應。它似乎沒有通過電腦。 (PC和設備共享10.0.0.x範圍。)
它應該通過嗎? (我已經用Wireshark驗證過這個消息沒有到達PC上,而且我用我的jtag驗證過設備發出了一條消息。)
爲了解決這個問題,我可以讓PC枚舉所有ips併發送幾個udp消息。但是這樣做的性能有些不好,並且可能會導致糟糕的設備氾濫。 (該設備將接收所有的消息並作出相應的響應,這是沒有收到響應的PC。)
是我的設備(這是一個小的RTOS btw),有一個有缺陷的傳輸?
或者有沒有辦法來解決這個問題,而不會淹沒我的小設備?
我沒有看到您的設備加入多播組。您是否從片段中刪除了該部分? – Artefacto
是的,該片段只是一個很好的自包含樣本。真正的代碼還加入了多播組(並且有很多編碼/解碼)。 – Illishar
請從RTOS設備上發佈'netstat -rn'和'ifconfig'(或其等價物) –