각 노드에 있는 장치의 ip를 서치하기 위해 UDP/브로드캐스트로 송신합니다.
그럼 각 노드가 응답을 하는데 하나만 수신이 되는군요.
현재는 노드 2대만 가지고 테스트 하는데 두번째로 응답하는 노드의 데이터만 수신됩니다.
각 노드가 거의 동시에 응답하면 각 노드의 데이터가 줄줄이 들어올줄 알았는데 그렇지 않는군요.
이걸 어떻게 해결해야할까요?
이더리얼로 두개의 노드가 응답하는건 확인 했습니다. 그런데 늦게 응답한 노드의 데이터만 들어오네요.
//------------------------------IP 서치
private void ipSearchBtn_Click(object sender, EventArgs e)
{
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
s.EnableBroadcast = true;
byte[] sendbuf = Encoding.ASCII.GetBytes("FDSearch");
EndPoint targetEndPoint = new IPEndPoint(IPAddress.Broadcast, 3001);
// UDP 브로드캐스팅 패킷을 네트워크에 전송
s.SendTo(sendbuf, targetEndPoint); <--각 노드로 송신
var arg = new SocketAsyncEventArgs();
arg.Completed += ReceiveAsync_Completed;
arg.SetBuffer(new byte[4096], 0, 4096);
// 비동기 방식의 수신 메소드 호출
s.ReceiveAsync(arg);
this.Text = "";
}
private void ReceiveAsync_Completed(object sender, SocketAsyncEventArgs e)
{
if (e.Buffer.Length == 0)
{
return;
}
// 수신이 완료되었을 때 호출되는 메소드
string txt = Encoding.UTF8.GetString(e.Buffer); <-- 두개의 노드중에 하나만 수신됩니다.
.
.
.
.
}