Ich möchte Udp-Nachricht an jede Maschine im LAN senden, indem Sie keine Broadcast verwenden. so, mein Code wie folgt aus:So senden Sie UDP-Nachrichten an jede Maschine im LAN
int sock = socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in tarAddr;
memset(&tarAddr, 0, sizeof(sockaddr_in));
tarAddr.sin_family = AF_INET;
tarAddr.sin_port = htons(1985);
char szTarAddr[16] = {0};
for(int i=2; i<255; i++)
{
sprintf(szTarAddr, "192.168.1.%d", i);
//if address is me, Ignore by continue...
...
tarAddr.sin_addr.s_addr = inet_addr(szTarAddr);
sendto(sock, msg, 18, 0, (sockaddr*)&tarAddr, sizeof(sockaddr));
}
Nur etwa die ersten 20 Maschinen (192.168.1.2 ~ 192.168.1.20) konnte die Meldung erhalten, könnten die meisten anderen Maschinen nicht erhalten.
Ich versuche, an 20 Maschinen zu senden, dann schlafen (5), dann an die anderen 20 Maschinen senden, und so weiter. aber dieser Weg ist nutzlos.
Mein Projekt ist eine Anwendung über mobile und ich möchte die Adresse des Handys wissen, In WIFI von LAN, Handy-Adresse beginnt in der Regel von 192.168.1.100, Aber ich kann es nicht garantieren. Wenn ich "for (int i = 100, i <120, i ++)" verwende, konnten die 192.168.1.2 ~ 99 und 192.168.1.121 ~ 254 keine Massagen empfangen. – liuhui
Sie müssen einen anderen Weg finden, um Ihre Ziele zu erreichen. Nichts in Ihrem Kommentar widerspricht oder ergänzt die Antwort. –