Russian Qt Forum

Qt => Работа с сетью => Тема начата: Anton от Март 19, 2006, 22:08



Название: QTcpSocket ошибка подключения к серверу
Отправлено: 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;
}



Название: QTcpSocket ошибка подключения к серверу
Отправлено: Steven_Orko от Март 20, 2006, 00:23
Не анализируя код.... Вообще, хорошим тоном является самому закрывать соединение, а не оставлять эту работу деструкторам. Лови событие о закрытии окна и закрывай соединение в обработчике этого события. Имхо, так будет правильнее...


Название: QTcpSocket ошибка подключения к серверу
Отправлено: Dendy от Март 20, 2006, 10:36
Отдебажь. Посмотри стек вьІзовов.