我正在编写一个简单的网络应用程序,它将向单个侦听器发送和接收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
,有没有办法我仍然可以保留不需要客户端-服务器连接的单元测试?