2016-03-23 23 views
1

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.

Antwort

0

Per Definition ist UDP zustandslos und garantiert keine Zustellung. Von https://en.wikipedia.org/wiki/User_Datagram_Protocol

Es gibt keine Garantie für die Lieferung, Bestellung, oder Schutz duplizieren.

Sie haben also festgestellt, dass einige Ihrer UDP-Pakete nicht zugestellt wurden. Das ist völlig in Ordnung, da die UDP-Paketzustellung nicht garantiert ist.

+0

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

+0

Sie müssen einen anderen Weg finden, um Ihre Ziele zu erreichen. Nichts in Ihrem Kommentar widerspricht oder ergänzt die Antwort. –

Verwandte Themen