• 4380阅读
  • 4回复

[提问]关于QT5中用TCP进行编程的一个问题。 [复制链接]

上一主题 下一主题
离线niushitana
 

只看楼主 倒序阅读 楼主  发表于: 2016-05-18
下面这段代码来自陆文周的<<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编程的朋友解答下我的疑惑。
离线llong

只看该作者 1楼 发表于: 2016-05-18
可能一次,也可能多次
离线niushitana

只看该作者 2楼 发表于: 2016-05-18
我现在暂时没有测试环境,楼上朋友能确定吗?
离线niushitana

只看该作者 3楼 发表于: 2016-05-19
还有其它朋友能发表下意见吗?
离线lsj754039701

只看该作者 4楼 发表于: 2016-05-20
同意1楼说的。 因此你发送数据时最好是  数据大小+数据  的格式发过去,接收端在数据达到指定大小才接收
快速回复
限100 字节
 
上一个 下一个