crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Soket + timer, Client + Server
QTUsers
  опции профиля:
сообщение 31.5.2014, 12:55
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 31.5.2014
Пользователь №: 4145

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




Репутация:   0  


Как создать задержку в 15 секунд между клиентом и сервером.

server.h

#include <QtNetwork>
#include <QtGui>
#include "myserver.h"

MyServer::MyServer(int nPort, QWidget *parent)
    : QWidget(parent), m_nNextBlockSize(0)
{
    m_ptcpServer = new QTcpServer(this);
       if (!m_ptcpServer->listen(QHostAddress::Any, nPort)) {
           QMessageBox::critical(0,
                                 "Server Error",
                                 "Unable to start the server:"
                                 + m_ptcpServer->errorString()
                                );
           m_ptcpServer->close();
           return;
       }
       connect(m_ptcpServer, SIGNAL(newConnection()),
               this,         SLOT(slotNewConnection())
              );

       m_ptxt = new QTextEdit(this);
       m_ptxt->setReadOnly(true);

       //Layout setup
       QVBoxLayout* pvbxLayout = new QVBoxLayout(this);
       pvbxLayout->addWidget(new QLabel("<H1>Server</H1>"));
       pvbxLayout->addWidget(m_ptxt);
       setLayout(pvbxLayout);
}

MyServer::~MyServer()
{

}

/*virtual*/ void MyServer::slotNewConnection()
{
    QTcpSocket* pClientSocket = m_ptcpServer->nextPendingConnection();
    connect(pClientSocket, SIGNAL(disconnected()),
            pClientSocket, SLOT(deleteLater())
           );
    connect(pClientSocket, SIGNAL(readyRead()),
            this,          SLOT(slotReadClient())
           );

    sendToClient(pClientSocket, "Server Response: Connected!");
}

// ----------------------------------------------------------------------
void MyServer::slotReadClient()
{
    QTcpSocket* pClientSocket = (QTcpSocket*)sender();
    QDataStream in(pClientSocket);
    in.setVersion(QDataStream::Qt_4_5);
    for (;;) {
        if (!m_nNextBlockSize) {
            if (pClientSocket->bytesAvailable() < sizeof(quint16)) {
                break;
            }
            in >> m_nNextBlockSize;
        }

        if (pClientSocket->bytesAvailable() < m_nNextBlockSize) {
            break;
        }
        QTime   time;
        QString str;
        in >> time >> str;

        QString strMessage =
            time.toString() + " " + "Client has sent - " + str;
        m_ptxt->append(strMessage);

        m_nNextBlockSize = 0;

        sendToClient(pClientSocket,
                     "Server Response: Received \"" + str + "\""
                    );
    }
}

// ----------------------------------------------------------------------
void MyServer::sendToClient(QTcpSocket* pSocket, const QString& str)
{
    QByteArray  arrBlock;
    QDataStream out(&arrBlock, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_5);
    out << quint16(0) << QTime::currentTime() << str;

    out.device()->seek(0);
    out << quint16(arrBlock.size() - sizeof(quint16));

    pSocket->write(arrBlock);
}

Прикрепленные файлы
Прикрепленный файл  myclient.txt ( 3.15 килобайт ) Кол-во скачиваний: 366
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 31.5.2014, 16:31
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


что такое задержка между клиентом и сервером ?

Если под этим понимается тупо задержка между приёмом с удалённого сокета и отправкой ответа, то можно воспользоваться

void QThread::sleep(unsigned long secs) [static]

(хм, кстати, в Qt5 её сделали public, а ранее, мне помнится, она была protected, и приходилось делать субклассинг для вызова)

А вообще, в твоём коде всё плохо - при работа с сокетами не нужны сигналы и слоты, но нужен отдельный поток. Иначе будет очень неудобно

Сообщение отредактировал Алексей1153 - 31.5.2014, 16:39
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QTUsers
  опции профиля:
сообщение 10.6.2014, 14:50
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 31.5.2014
Пользователь №: 4145

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




Репутация:   0  


Я новичок в Qt и в программировании. Нужно сделать интенсивность передачи информации которая равна 15 секундам. Можешь отредактировать мою программу
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.3.2024, 12:22