【发布时间】:2013-07-12 08:39:48
【问题描述】:
我正在尝试将动态数据写入 QTcpSocket,这就是我的实现方式:
connect(&m_tcpSocket, SIGNAL(bytesWritten(qint64)), SLOT(written(qint64)));
//...
void MyClass::written(qint64 iBytes)
{
if(iBytes>0)
m_strWrite = m_strWrite.mid(iBytes);
if(m_strWrite.length()<1)
{
if(m_hHandle->isDone())
m_tcpSocket.disconnectFromHost();
}else if(m_tcpSocket.isValid()){
m_tcpSocket.write(m_strWrite);
}
}
//...
void MyClass::dataReady(const QByteArray &strData)
{
bool bWrite = m_strWrite.isEmpty();
m_strWrite.append(strData);
if(bWrite)
written(0);
}
dataReady是一个slot,当有数据准备好时调用,strData最多8192字节。
这种方法效果很好,但是当数据很大(> 500 MB)时,会发生奇怪的事情,有时写入的数据比我预期的要多得多,有时会丢失一些数据,有时一段时间后什么都没有写入...... .
我只是想要动态缓冲区,写入套接字,还有其他方法吗?
【问题讨论】:
标签: c++ qt sockets tcp qtcpsocket