sendto(),recvfrom()同时

时间:2018-08-22 13:34:48

标签: c++ linux multithreading sockets udp

我在服务器中有两个分离的线程:用于接收和发送数据。 一切正常,直到将客户端的发送频率设置为16 ms(<〜200 ms)。在这种状态下,总是有一个线程在比赛中获胜,并仅以大约1美元的ping响应一个客户端。我需要做的是使用两个(或一个)UDP套接字在单独的线程中发送和接收数据?

服务器代码的一部分:

void Server::receive() {
    while(true) {
        if (recvfrom(getReceiver()->getSocketDesc(), buffer, getBufferLength(), 0, (struct sockaddr *) &currentClient, getReceiver()->getLength()) < 0) {
        // add message to client's own thread-safe buffer
        }
    }
}

void Server::send() {
    while(true) {
        // get message from thread-safe general buffer after processing
        // dequeue one
        if (message != nullptr)
            sendto(getDispatcher()->getSocketDesc(), "hi", 2, 0, message->_addr, *getDispatcher()->getLength());
    }
}

0 个答案:

没有答案