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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTcpSocket ошибка подключения к серверу  (Прочитано 5642 раз)
Anton
Гость
« : Март 19, 2006, 22:08 »

Следующий фрагмент кода компилируется, работает, подключается к серверу, сервер схватывает подключение, но если после этого просто закрыть окно приложения, то вываливается unhandled exception где-то в qtgui4.dll

Код:

#include "plotterclient.h"
#include <QMessageBox>
#include <QString>


PlotterClient::PlotterClient(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
ui.setupUi(this);
connect(&socket,SIGNAL(connected()),
this,SLOT(connectionEstablished())); // connection established
connect(&socket,SIGNAL(connectionClosed()),
this,SLOT(connectionClosedByServer()));
connect(&socket,SIGNAL(readyRead()),
this,SLOT(dataReceived()));
connect(&socket,SIGNAL(error(int)),
this,SLOT(error(int)));
}

PlotterClient::~PlotterClient()
{
closeConnection();
QMessageBox::information(0,tr("Destructor"),tr(""));
}


void PlotterClient::connectionEstablished()
{
QMessageBox::information(0,tr("info"),tr("connection established"));
}

void PlotterClient::connectionClosedByServer()
{
QMessageBox::information(0,tr("info"),tr("connectionClosedByServer"));

}
void PlotterClient::dataReceived()
{
QMessageBox::information(0,tr("info"),tr("data received"));

}

void PlotterClient::error(int code)
{
QString message;
switch(code)
{
case QAbstractSocket::ConnectionRefusedError :
message = tr("Error: Connection refused");
break;

case QAbstractSocket::HostNotFoundError :
message = tr("Error: Host not found");
break;

default:
        message = tr("Error: Data transfer failed");


}
QMessageBox::critical(0,tr("Error"),message);
closeConnection();

}

void PlotterClient::closeConnection()
{
socket.close();
}

void PlotterClient::on_connectButton_clicked()
{
host"));
socket.connectToHost("localhost",1251);
blocksize = 0;
}

Записан
Steven_Orko
Гость
« Ответ #1 : Март 20, 2006, 00:23 »

Не анализируя код.... Вообще, хорошим тоном является самому закрывать соединение, а не оставлять эту работу деструкторам. Лови событие о закрытии окна и закрывай соединение в обработчике этого события. Имхо, так будет правильнее...
Записан
Dendy
Гость
« Ответ #2 : Март 20, 2006, 10:36 »

Отдебажь. Посмотри стек вьІзовов.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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