不明白的是in >> blockSize是单纯只降int型的数据赋值给blockSize吗?
blockSize的定义是quint16。
请问下 in >> 是否可以自动匹配类型的?
请问下 这是关于哪方便的知识点,我自己去恶补一下
Client:
QDataStream in(tcpSocket);
// 设置数据流版本,这里要和服务器端相同
in.setVersion(QDataStream::Qt_4_0);
// 如果是刚开始接收数据
if (blockSize == 0) {
//判断接收的数据是否大于两字节,也就是文件的大小信息所占的空间
//如果是则保存到blockSize变量中,否则直接返回,继续接收数据
if(tcpSocket->bytesAvailable() < (int)sizeof(quint16)) return;
in >> blockSize;
}
// 如果没有得到全部的数据,则返回,继续接收数据
if(tcpSocket->bytesAvailable() < blockSize) return;
// 将接收到的数据存放到变量中
in >> message;
// 显示接收到的数据
ui->messageLabel->setText(message);
Server:
// 用于暂存要发送的数据
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
// 设置数据流的版本,客户端和服务器端使用的版本要相同
out.setVersion(QDataStream::Qt_4_0);
out << (quint16)0;
out << tr("hello TCP!!!");
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
// 获取已经建立的连接的套接字
QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
connect(clientConnection, &QTcpSocket::disconnected,
clientConnection, &QTcpSocket::deleteLater);
clientConnection->write(block);
clientConnection->disconnectFromHost();
// 发送数据成功后,显示提示
ui->label->setText(tr("发送数据成功!!!"));