下面这段代码来自陆文周的<<QT5开发与实例>>中第10章讲TCP编程,编号为1004的一份源代码中的一段:
#include "tcpclientsocket.h"
TcpClientSocket::TcpClientSocket(QObject *parent)
{
connect(this,SIGNAL(readyRead()),this,SLOT(dataReceived()));
connect(this,SIGNAL(disconnected()),this,SLOT(slotDisconnected()));
}
void TcpClientSocket::dataReceived()
{
while(bytesAvailable()>0)
{
int length = bytesAvailable();
char buf[1024];
read(buf,length);
QString msg=buf;
emit updateClients(msg,length);
}
}
void TcpClientSocket::slotDisconnected()
{
emit disconnected(this->socketDescriptor());
}
我所知道的是,用TCP协议接收数据包的时候,发送方发的一个数据包,接收方接收时接收到有可能是一个整包一次接收,也有可能是分成几次来接收的。我想问的是:像上面这段代码,如果包是分成几次接收到的,是每次收到包都产生一个readyRead()消息了?还是只会生产一次readyRead()消息?麻烦熟悉QT TCP编程的朋友解答下我的疑惑。