2016-03-23 19 views
1

Yayını kullanmadan LAN'daki her makineye Udp mesajı göndermek istiyorum. böylece, böyle benim kod:LAN'daki her makineye UDP iletileri nasıl gönderilir?

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)); 
} 

Sadece yaklaşık ilk 20 makineleri (192.168.1.2 ~ 192.168.1.20) mesajını alabilir, diğer makinelerin çoğu alması mümkün olabilir.

20 makineye göndermeyi deniyorum, sonra uyu (5), sonra diğer 20 makineye gönderim vb. ama bu yol işe yaramaz.

cevap

0

Tanım olarak, UDP vatansız ve teslimatı garanti etmez. Şu an için bu ürünün teslimatı, siparişi aldığınız veya kopyalandığı garanti edilmemektedir. Bu nedenle UDP paketlerinizin bazılarının teslim edilmediğini gözlemlediniz. UDP paket teslimi garanti edilmediği için bu çok iyi.

+0

Projem mobil cihazlarla ilgili bir uygulamadır ve cep telefonunun adresini bilmek istiyorum, WIFI of LAN'da, cep telefonunun adresi genellikle 192.168.1.100 ile başlıyor ancak bunu garanti edemiyorum. "(int i = 100, i <120, i ++)" için kullanırsam 192.168.1.2 ~ 99 ve 192.168.1.121 ~ 254 masajları alamadı. – liuhui

+0

Hedeflerinizi gerçekleştirmek için başka bir yol bulmak zorundasınız. Yorumunuzdaki hiçbir şey, yanıtla çelişmez ya da tamamlamaz. –