Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 客户端到服务器延迟估计-通过UDP_C++_Sockets - Fatal编程技术网

C++ 客户端到服务器延迟估计-通过UDP

C++ 客户端到服务器延迟估计-通过UDP,c++,sockets,C++,Sockets,我的作业是写一个函数,让客户端到服务器的延迟估计。 我需要从客户端发送50个请求的时间是什么时候?然后通过getTickCount从服务器接收50个响应,然后计算平均值。 问题是,由于某种原因,第二个recv函数崩溃了,我不知道为什么。 这是我客户端代码的一部分: WSAData wsaData; if (NO_ERROR != WSAStartup(MAKEWORD(2,2), &wsaData)) { cout<<"Time Client: Error

我的作业是写一个函数,让客户端到服务器的延迟估计。 我需要从客户端发送50个请求的时间是什么时候?然后通过getTickCount从服务器接收50个响应,然后计算平均值。 问题是,由于某种原因,第二个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;
        }

你试过切换到recvfrom吗?因为您使用的是sendto,所以它的镜像功能应该更有意义


此外,如果您在处理单个接收之前发送50个请求,那么您的延迟将不会有任何好处。应在多个单发送/接收对上计算平均值

定义两个整数变量开始、结束 在处理从服务器发送的消息的for循环中的错误后添加此代码

            recvBuff[bytesRecv] = '\0'; //for handling null terminated to the answer

            if (i == 0)
            {
                start = atoi(recvBuff);
            }
            if(i == 50){
            end = atoi(recvBuff);
            }


        cout << endl << "Time Client: Delay Estimation:       " << (end - start) / 50<< " ms " << endl;

我们可以假设评论中的100是一个打字错误吗?我们缺少很多上下文。如果您能提供一个简短、完整的程序,那将是最好的。看见如果不行,你是什么意思?连接是TCP还是UDP?在resp之后,bytesent和bytesRecv的值是什么。系统调用?recvBuff是如何声明的?您不应该使用recvfrom吗??这是UDP对吗?旁白:strlensendBuff.c_str很傻。更喜欢sendBuff.size.yes,这是UDP!在我选择这个函数后,程序完全卡住了,如果我运行的RTT计算使用的是同一个函数,但在每次请求后它都会要求响应-没问题。唯一的区别是连续的请求。基本上,我的老师给了我们一个简单的UDP客户端和服务器的例子,所以我遵循他的代码,我的所有其他功能都与recv配合得很好。无论如何,我试着使用rcvform,但我遇到了同样的问题。不,我看到我也有异常-comex3.exe中0x757b6aff的第一次机会异常:0x40010005:Control-C。这是什么意思??