标题:关于QT5中用TCP进行编程的一个问题。
作者:niushitana
日期:2016-05-18 16:42
内容:
下面这段代码来自陆文周的中第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编程的朋友解答下我的疑惑。
#1 [llong 05-18 17:40]
可能一次,也可能多次
#2 [niushitana 05-18 21:04]
我现在暂时没有测试环境,楼上朋友能确定吗?
#3 [niushitana 05-19 09:54]
还有其它朋友能发表下意见吗?
#4 [lsj754039701 05-20 13:59]
同意1楼说的。 因此你发送数据时最好是数据大小+数据的格式发过去,接收端在数据达到指定大小才接收