2016-03-23 8 views
1

ブロードキャストを使用せずにLAN内の各マシンにUdpメッセージを送信します。そう、このように私のコード:LAN内の各マシンにUDPメッセージを送信する方法

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

のみについての最初の20機(192.168.1.2〜192.168.1.20)がメッセージを受け取ることができ、他のマシンのほとんどはそれを受け取ることができませんでした。

私は20台のマシンに送信し、スリープしてから(5)、他の20台のマシンに送信しようとします。しかし、この方法は役に立たない。

答えて

0

定義上、UDPはステートレスであり、配信を保証しません。 〜からhttps://en.wikipedia.org/wiki/User_Datagram_Protocol

配送、注文、または複製の保護の保証はありません。

したがって、UDPパケットの一部が配信されていないことがわかりました。 UDPパケットの配送は保証されていないので、これは完璧です。

+0

私のプロジェクトはモバイルに関するアプリケーションで、モバイルのアドレスを知りたいです.LANのWIFIでは、モバイルのアドレスは通常192.168.1.100から始まりますが、それは保証できません。 "for(int i = 100、i <120、i ++)"を使用すると、192.168.1.2〜99と192.168.1.121〜254はマッサージを受け取れませんでした。 – liuhui

+0

あなたの目標を達成するために他の方法を見つけなければなりません。あなたのコメントの中の何も答えに矛盾するもの、または補足するものはありません。 –

関連する問題