crossplatform.ru

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

> QTcpServer и QTcpSocket, как с ними работать?
ubuntu
  опции профиля:
сообщение 10.10.2007, 16:12
Сообщение #1


Студент
*

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

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




Репутация:   0  


Хочу написать клент-серверное приложение на Qt, как я понимаю мне нужно использовать классы QTcpServer и QTcpSocket.
Но что-то я не могу понять, почему при соединении не вызывается newConnection, в моей классе производном от QTcpServer, хотя функция вроде виртуальная. И пока не совсем понятно, как строить взаимодействие слушающего сокета с соединениями.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Гость_antoshib_*
сообщение 21.4.2010, 11:39
Сообщение #2





Гости








    


привет, а почему сразу с таких сложных примеров начинать?

Помогите пожалуйста с простейшим серверком. Нужно из консольного
клиентского приложения отправить строчку и в консольном серверном приложении
вывести принятую строку в дебаг. Делаю так:

сервер:
Раскрывающийся текст
#include <QDebug>
#include <QtNetwork>


void respServer( QTcpServer *tcpServer ){

    QTcpSocket  *clientSocket= tcpServer->nextPendingConnection();
    const int   Timeout      = 5 * 1000;

    while (clientSocket->bytesAvailable() < (int)sizeof(quint16)) {
        if (!clientSocket->waitForReadyRead(Timeout)) {
            qDebug() << "[1]"   << clientSocket->error()
                     << ": "    << clientSocket->errorString();
            return;
        }
    }


    quint16     blockSize;
    QDataStream in(clientSocket);
    in.setVersion(QDataStream::Qt_4_0);
    in >> blockSize;

    while (clientSocket->bytesAvailable() < blockSize) {
        if (!clientSocket->waitForReadyRead(Timeout)) {
            qDebug() << "[2]"   << clientSocket->error()
                     << ": "    << clientSocket->errorString();
            return;
        }
    }


    qDebug() <<  "BlockSize: " << blockSize;


    QString nextData;
    in  >>  nextData;

    qDebug() <<  "Received: " << nextData;
}


int main(int argc, char *argv[])
{


    QTcpServer  tcpServer;

    if (!tcpServer.listen(QHostAddress::Any, 33333)) {

        qDebug() <<  QObject::tr("Unable to start the server: %1.")
                            .arg(tcpServer.errorString());
    }


    while( 1 ){
        if ( tcpServer.waitForNewConnection(100) )
            respServer( &tcpServer );
    }

}




клиент:
Раскрывающийся текст
#include <QDebug>
#include <QtNetwork>


int main(int argc, char *argv[]){


    QString     serverName  = "127.0.0.1";
    quint16     serverPort  = 33333;
    const int   Timeout     = 5 * 1000;


    QTcpSocket socket;
    socket.connectToHost(serverName, serverPort);

    if (!socket.waitForConnected(Timeout)) {

        qDebug()<< "[1] "   << socket.error()
                << ": "     << socket.errorString();
        return 1;
    }


    if (!socket.waitForReadyRead(Timeout)) {

        qDebug()<< "[2] "   << socket.error()
                << ": "     << socket.errorString();
        return 2;
    }


    QByteArray  block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_0);

    out << (quint16)0;
    out << "Hello!!!";
    out.device()->seek(0);
    out << (quint16)(block.size() - sizeof(quint16));


    socket.write( block );
    socket.disconnectFromHost();

    return 0;
}


все запускается, но соединение сбрасывается.. ((
Причина редактирования: codebox - неудобен
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




RSS Текстовая версия Сейчас: 14.1.2025, 10:53