使用TCP时,服务器比客户端花费更多的时间

使用TCP时,服务器比客户端花费更多的时间,tcp,Tcp,我正在研究客户机-服务器体系结构。我正在从客户端向服务器发送大约8000000字节的数据。我有点惊讶地知道,我的客户机只需704毫秒就可以发送数据,但whöserver需要3922毫秒来接收这些数据 虽然我没有在服务器端对数据进行任何操作,但只是简单地接收数据。客户端和服务器的硬件架构也相同。我使用WIRESHARK检查了数据流,但客户端和服务器之间的时间差似乎是~6倍 关于为什么服务器总是比客户端花费更多时间的一般假设是什么? 过热CP、UDP、以太网报头对通信的影响。 注意:我使用std::

我正在研究客户机-服务器体系结构。我正在从客户端向服务器发送大约8000000字节的数据。我有点惊讶地知道,我的客户机只需704毫秒就可以发送数据,但whöserver需要3922毫秒来接收这些数据

虽然我没有在服务器端对数据进行任何操作,但只是简单地接收数据。客户端和服务器的硬件架构也相同。我使用WIRESHARK检查了数据流,但客户端和服务器之间的时间差似乎是~6倍

关于为什么服务器总是比客户端花费更多时间的一般假设是什么? 过热CP、UDP、以太网报头对通信的影响。 注意:我使用std::Clock来测量客户端和服务器的执行时间,使用以太网连接将数据传输到服务器

统计数字:

8000000字节客户端704毫秒,服务器3922毫秒 80000000字节客户端7175毫秒,服务器13188毫秒 80000000字节客户端72797毫秒,服务器77719毫秒 800000000字节客户端72797毫秒,服务器77719毫秒 //客户端代码

    std::clock_t c_start = std::clock();
    for( int i = 0; i <100000; i++)// writing data to buffer
    {    
        m_vector.push_back(i);
    }
    uint32_t siz = (m_vector.size())*sizeof(double);
    int total_bytes = 0;
    int count=0;
    for(int j=0; j<1000; j++)
    {  
        bytesSent = send(ConnectSocket,(char*)&siz, 4, 0);
        assert (bytesSent == sizeof (uint32_t));
        std::cout<<"length information is in:"<<bytesSent<<"bytes"<<std::endl;
        bytesSent = send(ConnectSocket,(char*)m_vector.data(), siz, 0);
        total_bytes = total_bytes+bytesSent;
    }
      closesocket (ConnectSocket);
    std::clock_t c_end = std::clock();
    std::cout << "CPU time used: "<< 1000.0 * (c_end-c_start) / CLOCKS_PER_SEC<< " ms\n";
    WSACleanup();
   system("pause");
    return 0;
}
//服务器代码

while(1)
    {
        //code to received data length from the client
        int length_received = recv(m_socket,(char*)&nlength, 4, 0); 
        m_vector.resize(nlength/sizeof(double));

        //code to received data length from the client
        bytesRecv = recv(m_socket,(char*)m_vector.data(), nlength, 0);
        count++;
            if((count==1))
            {
            std::clock_t c_start = std::clock();
            }

        //1st time data
        if((bytesRecv > 0 ))
        {
            total_br = total_br + bytesRecv;
            v1=m_vector;
            cout<<"Server: Received bytes are"<<total_br<<std::endl;
        }else {break;}

        }
                closesocket (m_socket);
        std::clock_t c_end = std::clock();
        std::cout << "CPU time used: "<< 1000.0 * (c_end-c_start) / CLOCKS_PER_SEC<< " ms\n";
        WSACleanup();
       system("pause");
        return 0;
    }
在TCP中发送仅仅意味着将数据写入本地套接字发送缓冲区。将TCP段实际放到网络上是异步的。这意味着,即使在关闭套接字之后,并非所有数据都已实际传输。因此,进行发送方时间测量基本上是没有意义的

花3922毫秒来接收如此大的传输量并没有什么了不起的


你可能测量错了。向我们展示您的代码。特别是,您可能正在测量写入缓冲区所需的时间。@SLaks我认为代码可能不是必需的。您可以看看我刚才添加的统计数据吗。抱歉之前的版本我更正了一些事实。为什么我会看到这样的差异,即当数据量增长时,时间差异会变小?你的统计数据并没有告诉我们你实际测量的是什么,这就是Slak的观点。@SLaks这是代码。