考虑加速tcp / udp连接

时间:2017-02-21 13:29:52

标签: c++ performance sockets udp winsock2

我正在使用winsock2库为其上带有1Gbps以太网的数字板编写SDK(软件开发套件)。我面临的问题是我无法通过以太网使用TCP / UDP获得足够的传输速率(TX / RX)。我宁愿使用UDP-RX作为案例研究来理解每个参数,而不是加速我的连接。使用下面的代码,我可以将数据从我的PC发送到我的设备,速度仅为~350 Mbps。

开始倾听:

//Initialize winsock library
if (WSAStartup(MAKEWORD(2, 2), &m_wsa) != 0)
{
    error = WSAGetLastError();
}
//Create a socket
if ((m_serversocket = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET)
{
    error = WSAGetLastError();
    WSACleanup();
    return;
}
int buffersize = 0x200000;
int buffersizelen = sizeof(buffersize);
setsockopt(m_serversocket, SOL_SOCKET, SO_RCVBUF, (char*)&buffersize, buffersizelen);
//Prepare the sockaddr_in structure
memset(&m_serveraddress, 0, sizeof(m_serveraddress));
m_serveraddress.sin_family = AF_INET;
inet_pton(AF_INET, SERVER_Address, &m_serveraddress.sin_addr.s_addr);
m_serveraddress.sin_port = htons(SEND_PORT_number);
// Bind the socket to any address and the specified port.
if (bind(m_serversocket, (struct sockaddr *)&m_serveraddress, sizeof(m_serveraddress)) == SOCKET_ERROR)
{
    error = WSAGetLastError();
    return;
}

发送文件:

    sendchunk = 1000;
    // Read File and fill the buffer 
    if ((m_err = fopen_s(&m_send_file, m_send_filename.toLocal8Bit().data(), "rb")) == 0)
    {
        // start to send buffer
        while (!(feof(m_send_file) || m_stopsend))
        {
            remainsize = fread(read_data, 1, sendfilesize / count, m_send_file);
            sndsize_ProgBar += remainsize;
            sentsize = 0;
            timer.start();
            while ((remainsize >= sendchunk) && !(m_stopsend))
            {
                sendto(m_serversocket, read_data + sentsize, sendchunk, 0, (struct sockaddr *)&m_serveraddress, addrlengh); // 1024
                sentsize += sendchunk;
                remainsize -= sendchunk;
            }
            elapsedtimemicrosec = timer.getElapsedTimeInMicroSec();
            timer.stop(); 
            rcvRate = (float)(((remainsize + sentsize)) / elapsedtimemicrosec);
            emit UpdateSendRate(rcvRate);
        }
    }

有关加速连接的任何建议吗?

P.S:我已尝试过不同的sendchunk并选择最佳。

0 个答案:

没有答案