QT中关于QTcpSocket 类的 disconnected()和 error()信号
场景:QT中关于QTcpSocket 类的 disconnected()和 error()信号,解决思路
QT中关于QTcpSocket 类的 disconnected()和 error()信号,急!!!
各位大侠,帮帮忙 :
我在自定义类中定义了一个QTcpSocket成员,然后在类的构造函数中分别关联了QTcpSocket的connected()、disconnected()、error()信号到相应的槽,分别在disconnected()和error()关联的槽中执行了 connectToHost()命令,当我联上服务器断再断掉后为什么disconnected()相应槽的connectToHost()命令执行后QTcpSocket成员能得到connected()信号,而error()相应槽的connectToHost()命令执行后QTcpSocket成员却不能得到connected()信号呢?(附简易代码说明)
class TCP_Client : public QThread
{
Q_OBJECT
public:
.
.
.
private:
QTcpSocket m_socket;
public slots:
void ConnectSucceed();
void DestroyConnection();
};
TCP_Client::TCP_Client()
{
connect(&m_socket, SIGNAL(connected()), this, SLOT(ConnectSucceed()));
connect(&m_socket, SIGNAL(disconnected()), this, SLOT(DestroyConnection()));
// connect(&m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(DestroyConnection()));
}
.
.
.
void TCP_Client::ConnectSucceed()
{
emit CommunicationStateChanged(m_ObjectCar, TRUE);
return;
}
void TCP_Client::DestroyConnection()
{
m_socket.abort();
emit CommunicationStateChanged(m_ObjectCar, FALSE);
m_socket.connectToHost("192.168.1.1", 9998); //当第一次连接上服务器再断开后
//为什么通过disconnected()关联到该槽时,执行了这句后能进入ConnectSucceed()槽;
//而通过error()关联到该槽时,执行了这句后却不能进入ConnectSucceed()槽。似乎m_socket跟本就没发射connected()信号。
return;
}
------解决方案--------------------
任何连接或者正在进行的连接被立即关闭,并且QSocket进入HostLookup 状态。当查找成功,它发射hostFound(),开始一个TCP连接并且进入Connecting状态。最后,当连接成功时,它发射connected()并且进入Connected状态。如果在任何一个地方出现错误,它发射error()。
没道理啊,如果没有error,则一定有connected信号,换个思路,在DestroyConnection函数里connect(&m_socket, SIGNAL(connected()), this, SLOT(ConnectSucceed())); 看看
QT中关于QTcpSocket 类的 disconnected()和 error()信号,急!!!
各位大侠,帮帮忙 :
我在自定义类中定义了一个QTcpSocket成员,然后在类的构造函数中分别关联了QTcpSocket的connected()、disconnected()、error()信号到相应的槽,分别在disconnected()和error()关联的槽中执行了 connectToHost()命令,当我联上服务器断再断掉后为什么disconnected()相应槽的connectToHost()命令执行后QTcpSocket成员能得到connected()信号,而error()相应槽的connectToHost()命令执行后QTcpSocket成员却不能得到connected()信号呢?(附简易代码说明)
class TCP_Client : public QThread
{
Q_OBJECT
public:
.
.
.
private:
QTcpSocket m_socket;
public slots:
void ConnectSucceed();
void DestroyConnection();
};
TCP_Client::TCP_Client()
{
connect(&m_socket, SIGNAL(connected()), this, SLOT(ConnectSucceed()));
connect(&m_socket, SIGNAL(disconnected()), this, SLOT(DestroyConnection()));
// connect(&m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(DestroyConnection()));
}
.
.
.
void TCP_Client::ConnectSucceed()
{
emit CommunicationStateChanged(m_ObjectCar, TRUE);
return;
}
void TCP_Client::DestroyConnection()
{
m_socket.abort();
emit CommunicationStateChanged(m_ObjectCar, FALSE);
m_socket.connectToHost("192.168.1.1", 9998); //当第一次连接上服务器再断开后
//为什么通过disconnected()关联到该槽时,执行了这句后能进入ConnectSucceed()槽;
//而通过error()关联到该槽时,执行了这句后却不能进入ConnectSucceed()槽。似乎m_socket跟本就没发射connected()信号。
return;
}
------解决方案--------------------
任何连接或者正在进行的连接被立即关闭,并且QSocket进入HostLookup 状态。当查找成功,它发射hostFound(),开始一个TCP连接并且进入Connecting状态。最后,当连接成功时,它发射connected()并且进入Connected状态。如果在任何一个地方出现错误,它发射error()。
没道理啊,如果没有error,则一定有connected信号,换个思路,在DestroyConnection函数里connect(&m_socket, SIGNAL(connected()), this, SLOT(ConnectSucceed())); 看看