Ich muss einen UDP-Broadcast empfangen (in Ubuntu, falls das einen Unterschied macht). Mit Wireshark kann ich sehen, dass das Paket vom Server gesendet wird, und ich kann sehen, dass es von meinem Client-Rechner empfangen wird, aber mein Programm ist völlig ahnungslos. Das ist, was ich habe:
sockaddr_in si_me, si_other;
int s;
assert((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))!=-1);
int port=6000;
int broadcast=1;
setsockopt(s, SOL_SOCKET, SO_BROADCAST,
&broadcast, sizeof broadcast);
memset(&si_me, 0, sizeof(si_me));
si_me.sin_family = AF_INET;
si_me.sin_port = htons(port);
si_me.sin_addr.s_addr = INADDR_ANY;
assert(::bind(s, (sockaddr *)&si_me, sizeof(sockaddr))!=-1);
while(1)
{
char buf[10000];
unsigned slen=sizeof(sockaddr);
recvfrom(s, buf, sizeof(buf)-1, 0, (sockaddr *)&si_other, &slen);
printf("recv: %s\n", buf);
}
Es wird im Debug-Modus kompiliert, die Asserts werden während der Kompilierung nicht gelöscht, und mein Programm blockiert einfach bei recvfrom
.
Gibt es noch andere Hürden, die ich überwinden muss, um eine ungezielte UDP-Übertragung zu empfangen?
Bearbeiten: nur ein bisschen mehr Informationen, ich habe die beiden Computer auf einem dedizierten Switch verbunden, keine Störungen von außen. Ich habe auch eine zweite Netzwerkkarte in meinem Client-Computer, die mit dem Firmennetzwerk verbunden ist, was auch funktioniert.
Ich kann sowohl die Außenwelt (Internet funktioniert) als auch meinen Servercomputer anpingen (und ich kann die tatsächlichen Pakete in Wireshark sehen), aber man weiß nie, was dieses Problem verursachen könnte.