Russian Qt Forum
Май 21, 2024, 12:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: (решено) примитивный tcp клиент  (Прочитано 6343 раз)
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();

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

в первом варианте я добавил мессаджбокс для проверки (найти, де ошибка) и все заработало
второй тоже подключается к серверу, прерывает соединение, но не передает данных
« Последнее редактирование: Декабрь 24, 2010, 16:03 от lem » Записан
registrationfedser87
Гость
« Ответ #1 : Декабрь 24, 2010, 14:43 »

Во втором случае у тебя сокет удаляется, а отправить ещё не успевает. В первом же случае ты вызываешь messageBox.exec(), что не удаляет сокет пока ты не закроешь messageBox.
Записан
lem
Гость
« Ответ #2 : Декабрь 24, 2010, 14:55 »

а есть команда ожидания?
чтоб время занять не мессаджбоксом а ей
Записан
Sanya
Гость
« Ответ #3 : Декабрь 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();
 

Это конечно чем-то напоминает индусский код, но работать должно, не проверял. Улыбающийся
А чем не устраивает слот-сигнальный механизм для ожидания записи данных?
Записан
lem
Гость
« Ответ #4 : Декабрь 24, 2010, 15:17 »

1)таки напоминает
2)я таких слов не знаю...
Записан
lem
Гость
« Ответ #5 : Декабрь 24, 2010, 15:23 »

+ вылазит ошибка

мол &client - это QTcpSocket а надо QObject
Записан
Sanya
Гость
« Ответ #6 : Декабрь 24, 2010, 15:42 »

2) ну это же основа Qt! Лучше попробуй сделать с сигналами и выложи если не получится.

может в именах где накосячил? QTcpSocket наследуется от QObject
Записан
DmP
Гость
« Ответ #7 : Декабрь 24, 2010, 15:52 »

а есть команда ожидания?
QAbstractSocket::waitForBytesWritten()
Записан
lem
Гость
« Ответ #8 : Декабрь 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();
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.065 секунд. Запросов: 17.