0
내 클라이언트가 서브넷의 모든 서버에 UDP 브로드 캐스트를 보냈습니다. 각 서버는 클라이언트가 서버 IP 주소를 얻거나 저장할 수 있도록 클라이언트에 응답합니다. 매번 모든 서버가 메시지를받을 수있는 것은 아닙니다 (아마도 UDP 때문입니까?). 서버의 새 IP 주소를 찾으면 브로드 캐스트 할 카운터를 늘리는 가장 좋은 방법입니까?서버에서 여러 sendto() 수신
다른 문제는 현재 클라이언트 쪽에서 발생하며 한 번에 하나의 메시지 만 받게됩니다. 동시에 여러 메시지를받을 수 있습니까?
이 내 클라이언트 코드입니다 : 당신이 방송을 보내면
if (recvfrom(Socket, receiveBuffer, BUFLEN, 0, (struct sockaddr *) &connectedSocket, &length) == SOCKET_ERROR)
{
printf("\nrecvfrom() failed with error code : %d" , WSAGetLastError());
closesocket(Socket);
WSACleanup();
exit(EXIT_FAILURE);
} else {
printf("\nServer Says : ");
printf("\n\nI am from %s:%d\n", inet_ntoa(connectedSocket.sin_addr), ntohs(connectedSocket.sin_port));
}
내가하려는 것은 기본적으로 (서버를 실행하는) 로컬 네트워크의 모든 컴퓨터를 쿼리하는 것입니다. 한 번에 1 개의 메시지 만받을 수 있기 때문에 새 IP 주소인지 확인하는 방법에 대해 어떻게 생각합니까? 그렇다면 카운터를 늘려 (원래 5는 말할 수 있습니다) 5할까요? more broadcasts – John
카운터 나 여러 방송을 전혀 사용할 필요가 없습니다. 하나의 브로드 캐스트를 보냅니다. 새로운 IP가 보이면 목록에 추가하고 계속 진행하십시오. 답장을받을 수있는 시간을주십시오. 즉각적이지 않을 수 있습니다. 한 번에 하나 이상의 메시지를받을 수 없기 때문에 SOCKET을 사용할 수 없다는 것을 의미하지는 않습니다. 이유 때문에 내부 수신 버퍼가 있습니다. 버퍼가 채워지지 않을 정도로 충분히 빨리 읽는다면 응답을 잃지 않을 것입니다. –
위의 코드를 (recvfrom ..) 블록을 무한 루프로 테스트 해보고 모든 응답을 얻었습니다! 버퍼에 대한 도움과 정보를 보내 주셔서 감사합니다. – John