crossplatform.ru

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


  Ответ в QTcpServer и QTcpSocket
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
sidsukana Дата 10.8.2011, 9:07
  Ну вот в том то и дело не получается правильно его потом принять.
BRE Дата 9.8.2011, 23:07
  Да, так.
Формируешь пакет и после этого устанавливаешь его размер.
sidsukana Дата 9.8.2011, 22:02
  Так что ли?
out << (quint16)0; // конец блока
    out << "Hello!!!";  // сообщение
    out << 12345;
    out << someobject;
    out.device()->seek(0); // ? установка позиции на начало блока?
    out << (quint16)(block.size() - sizeof(quint16)); // размер блока сообщения


Или надо конец блока для каждой посланной переменной? Я первый раз сталкиваюсь с передачей данных, поэтому и спрашиваю, как послать серию различных объектов и правильно их принять.
BRE Дата 9.8.2011, 21:51
  Ну так и серилизуй все что нужно в out.
sidsukana Дата 9.8.2011, 15:48
  Никто не объяснит?
sidsukana Дата 8.8.2011, 17:10
  Есть вопрос по поводу передачи данных. Вот на этом участке кода

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();


А что если нужно отправить не только текст, а допустим число, или объект в одном этом блоке? Как это сделать, примеров не нашел.
Gambit Дата 14.7.2010, 17:16
 
Цитата(ViGOur @ 10.10.2007, 16:40) *
const CxInteraction * const m_pInteraction;
Ругается ((((
..\network_demo_1\/networkdemo.h:85: error: ISO C++ forbids declaration of 'CxInteraction' with no type
..\network_demo_1\/networkdemo.h:85: error: expected ';' before '*' token

Ну и далеее
Цитата
CxConnectionThread::CxConnectionThread( qint32 qnSocket, QObject *pParent):QThread( pParent), m_pInteraction( (CxInteraction*)pParent)
{
m_qnSocket = qnSocket;
}

..\network_demo_1\/networkdemo.h: In constructor 'CxConnectionThread::CxConnectionThread(qint32, QObject*)':
..\network_demo_1\/networkdemo.h:102: error: class 'CxConnectionThread' does not have any field named 'm_pInteraction'
..\network_demo_1\/networkdemo.h:102: error: 'CxInteraction' was not declared in this scope
..\network_demo_1\/networkdemo.h:102: error: expected primary-expression before ')' token
In file included from ..\network_demo_1\main.cpp:2:
..\network_demo_1\/networkdemo.h: In member function 'virtual void CxConnectionThread::run()':

Цитата
qCritical( "Error in file: %s, line: %d %s", __FILE__, __LINE__, __FUNCSIG__);

..\network_demo_1\/networkdemo.h:153: error: '__FUNCSIG__' was not declared in this scope
..\network_demo_1\/networkdemo.h: In member function 'CxConnectionThread* CxInteraction::CreateThread(qint32)':
..\network_demo_1\/networkdemo.h:193: warning: format '%x' expects type 'unsigned int', but argument 2 has type 'CxConnectionThread*'
..\network_demo_1\/networkdemo.h:197: error: '__FUNCSIG__' was not declared in this scope
..\network_demo_1\/networkdemo.h: In member function 'void CxInteraction::CloseThread()':
..\network_demo_1\/networkdemo.h:212: warning: format '%x' expects type 'unsigned int', but argument 2 has type 'CxConnectionThread*'
antoshib Дата 24.4.2010, 9:32
 
Цитата(kwisp @ 22.4.2010, 9:22) *
Гость_antoshib_*
начни со стандартных примеров поставляемых с библиотекой.


С них и начал.. Но там сразу предлагается через потоки делать - не наглядно совсем!

выкрутился пока так, в сервере:
CODE

....

char *rb = new char( blockSize );
uint br = (uint) blockSize;

in.readBytes( rb, br );
qDebug() << "Received: " << rb;

delete[] rb;
kwisp Дата 22.4.2010, 9:22
  Гость_antoshib_*
начни со стандартных примеров поставляемых с библиотекой.

antoshib Дата 21.4.2010, 11:39
  привет, а почему сразу с таких сложных примеров начинать?

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

сервер:
Раскрывающийся текст
#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;
}


все запускается, но соединение сбрасывается.. ((
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 17:16