使用指向QIODevice的指针检测QTcpSocket断开连接

时间:2019-05-07 16:45:10

标签: qt qt5 qtnetwork

我正在编写一个简单的网络应用程序,它将向单个侦听器发送和接收TCP消息。我使用上下文类来包装许多通信逻辑,例如:

class context : public QObject
{
    Q_OBJECT

public:
    void setDevice (unique_ptr<QIODevice> device);
    void sendMessage (message msg);

signals:
    void newMessage (message msg);

private:
    unique_ptr<QIODevice> m_device;
}

为对象提供了通用的QIODevice而不是具体的子类型QTcpConnection,因此可以在没有网络连接的情况下测试逻辑。我希望所有网络错误都将作为QIODevice中的IO错误显示。但是,如果主机断开连接,则QIODevice不会发出信号。 QTcpConnection 确实发出信号(disconnected),但是底层的QIODevice保持打开状态,继续允许读写,并且似乎未发出任何通知错误。我对套接字确实看到断开连接的确认是,QIODevice中的错误字符串从“未知错误”更改为“套接字未连接”;但是检查错误字符串似乎像是黑客,应该没有必要。

实际上只有基类有某种方法可以检测到这种错误吗?如果要求我通过QTcpSocket,有没有办法我仍然可以保留不需要客户端-服务器连接的单元测试?

0 个答案:

没有答案