crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

mezmay
  опции профиля:
сообщение 30.8.2012, 13:37
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 272
Регистрация: 13.7.2009
Из: Ростов-на-Дону
Пользователь №: 904

Спасибо сказали: 16 раз(а)




Репутация:   1  


создаю сокетный сервер, запускаю:
void CWork::startSocketServer()
{
    m_ptcpServer = new QTcpServer(this);
    if(m_ptcpServer->listen(QHostAddress::Any, PKS_PORT)) 
    {
        connect(m_ptcpServer, SIGNAL(newConnection()),
            this, SLOT(onAccept()));
    }
    else
    {
        m_ptcpServer->close();        
    }
}


при установлении соединения все стандартно:
void CWork::onAccept()
{
    QTcpSocket *pClientSocket = m_ptcpServer->nextPendingConnection();

    connect(pClientSocket, SIGNAL(disconnected()),
        this, SLOT(onDisconnect()));
    connect(pClientSocket, SIGNAL(readyRead()),
        this, SLOT(onReceive()));
    connect(pClientSocket, SIGNAL(error(QAbstractSocket::SocketError)),
        this, SLOT(onError()));
}


при получении пакета:
void CWork::onReceive()
{
    QTcpSocket *pClientSocket = dynamic_cast<QTcpSocket *>(sender());
    QDataStream in(pClientSocket);
    in.setVersion(QDataStream::Qt_4_7);

    for(;;)
    {
        if(!m_nextBlockSize)
        {
            if(pClientSocket->bytesAvailable() < sizeof(m_nextBlockSize))
            {
                break;
            }
            else
            {
                in >> m_nextBlockSize;
            }
        }

        if(pClientSocket->bytesAvailable() < m_nextBlockSize)
        {
            break;
        }
        
        // Получение пакета
        receiveCmd(pClientSocket);

        m_nextBlockSize = 0;
    }
}

Все стандартно. Будет ли функция получения корректно работать со многими одновременно подключенными клиентами, то есть возможна ли ситуация когда пакет от одного клиента разобьется на части и между ними попадет пакет от другого клиента, или сокеты (Windows) такого не допускают?

Сообщение отредактировал mezmay - 30.8.2012, 14:14
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 23.6.2025, 12:16