0

私の宿題は、クライアントからサーバーへの遅延の見積もりを取得する関数を作成することです。クライアントから「今何時?」という 50 リクエストを送信する必要があります。サーバーから 50 の応答を受信するよりも (getTickCount() によって)、平均を計算するよりも。問題は、何らかの理由で 2 番目の recv 関数がクラッシュしたことです。その理由はわかりません。これは私のコードの一部です(私のクライアントから):

    WSAData wsaData; 
if (NO_ERROR != WSAStartup(MAKEWORD(2,2), &wsaData))
{
    cout<<"Time Client: Error at WSAStartup()\n";
}
SOCKET connSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (INVALID_SOCKET == connSocket)
{
    cout<<"Time Client: Error at socket(): "<<WSAGetLastError()<<endl;
    WSACleanup();
    return;
}

sockaddr_in server;
sockaddr serverr;
int server_len = sizeof(server);
server.sin_family = AF_INET; 
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_port = htons(TIME_PORT);

int bytesSent = 0;
int bytesRecv = 0;
string sendBuff;
char recvBuff[255];

        for (i=0 ; i<50;++i) 
    {   
        bytesSent = sendto(connSocket,sendBuff.c_str() , (int)strlen(sendBuff.c_str()), 0, (const sockaddr *)&server, sizeof(server));
        if (SOCKET_ERROR == bytesSent)
        {
            cout<<"Time Client: Error at sendto(): "<<WSAGetLastError()<<endl;
            closesocket(connSocket);
            WSACleanup();
            return;
        }
    }
    for (i=0 ; i<50;++i) 
    {
         bytesRecv = recv(connSocket, recvBuff, 255, 0);
        if (SOCKET_ERROR == bytesRecv)
        {
            cout<<"Time Client: Error at recv(): "<<WSAGetLastError()<<endl;
            closesocket(connSocket);
            WSACleanup();
            return;
        }
4

2 に答える 2

0

recvfrom に切り替えてみましたか?sendto を使用しているため、そのミラー機能はより理にかなっているはずです。

また、1 回の受信を処理する前に 50 回のリクエストを送信すると、遅延が発生することはありません。平均は、複数の単一の送受信ペアで計算する必要があります

于 2012-04-30T20:54:52.523 に答える