Russian Qt Forum

Qt => Работа с сетью => Тема начата: lem от Декабрь 24, 2010, 14:21



Название: (решено) примитивный tcp клиент
Отправлено: lem от Декабрь 24, 2010, 14:21
я в шоке..

обьясните плз почему работает код:

    QTcpSocket client;
    QHostAddress addr("127.0.0.1");
    client.connectToHost(addr, 56);
    QByteArray array = ui->lineEdit->text().toAscii();
    char * str;
    str = array.data();
    client.write(str, 3);
    client.close();
    QMessageBox box;
    QString s;
    s.fromAscii(str);
    box.setText(str);
    box.exec();

а такой не работает:

    QTcpSocket client;
    QHostAddress addr("127.0.0.1");
    client.connectToHost(addr, 56);
    QByteArray array = ui->lineEdit->text().toAscii();
    char * str;
    str = array.data();
    client.write(str, 3);
    client.close();

---------------------------------

в первом варианте я добавил мессаджбокс для проверки (найти, де ошибка) и все заработало
второй тоже подключается к серверу, прерывает соединение, но не передает данных


Название: Re: примитивный tcp клиент
Отправлено: registrationfedser87 от Декабрь 24, 2010, 14:43
Во втором случае у тебя сокет удаляется, а отправить ещё не успевает. В первом же случае ты вызываешь messageBox.exec(), что не удаляет сокет пока ты не закроешь messageBox.


Название: Re: примитивный tcp клиент
Отправлено: lem от Декабрь 24, 2010, 14:55
а есть команда ожидания?
чтоб время занять не мессаджбоксом а ей


Название: Re: примитивный tcp клиент
Отправлено: Sanya от Декабрь 24, 2010, 15:09
Код
C++ (Qt)
QTcpSocket client;
QHostAddress addr("127.0.0.1");
client.connectToHost(addr, 56);
QByteArray array = ui->lineEdit->text().toAscii();
char * str;
str = array.data();
client.write(str, 3);
QMessageBox box;
box.setText("Please, wait ...");
 
QObject::connect(&client, SIGNAL(bytesWritten(qint64)), &box, SLOT(accepted ()));
 
box.exec();
client.close();
 

Это конечно чем-то напоминает индусский код, но работать должно, не проверял. :)
А чем не устраивает слот-сигнальный механизм для ожидания записи данных?


Название: Re: примитивный tcp клиент
Отправлено: lem от Декабрь 24, 2010, 15:17
1)таки напоминает
2)я таких слов не знаю...


Название: Re: примитивный tcp клиент
Отправлено: lem от Декабрь 24, 2010, 15:23
+ вылазит ошибка

мол &client - это QTcpSocket а надо QObject


Название: Re: примитивный tcp клиент
Отправлено: Sanya от Декабрь 24, 2010, 15:42
2) ну это же основа Qt! Лучше попробуй сделать с сигналами и выложи если не получится.

может в именах где накосячил? QTcpSocket наследуется от QObject


Название: Re: примитивный tcp клиент
Отправлено: DmP от Декабрь 24, 2010, 15:52
а есть команда ожидания?
QAbstractSocket::waitForBytesWritten()


Название: Re: примитивный tcp клиент
Отправлено: lem от Декабрь 24, 2010, 16:02
ВСЕМ СПАСИБО заработало

    QTcpSocket client;
    QHostAddress addr("127.0.0.1");
    client.connectToHost(addr, 56);
    QByteArray array = ui->lineEdit->text().toAscii();
    char * str;
    str = array.data();
    client.write(str, 3);
    client.waitForBytesWritten();
    client.close();