从服务器接收多个sendto()

时间:2014-10-07 16:26:48

标签: visual-c++ winsock

我的客户端正在向子网上的所有服务器发送UDP广播。每个服务器都将回复客户端,以便客户端可以获取/存储服务器的IP地址。并非所有服务器都会收到消息(可能是因为UDP?)。当找到服务器的新IP地址时,最好的方法是将计数器增加到广播吗?

另一个问题是目前在客户端,它一次只能收到1条消息。是否可以同时接收多条消息?

这是我的客户代码:

    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 个答案:

答案 0 :(得分:0)

发送广播后,启动计时器并让它运行5到30秒。在此期间,处理您收到的任何回复。当计时器过去时,停止处理任何更多的回复,只要你碰巧收到它们就丢弃它们。

不,UDP套接字无法一次为您提供多个数据报,您必须单独阅读它们。