免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1813 | 回复: 0

QT_QDataStream类从socket中读取流后无法在UI上显示 [复制链接]

论坛徽章:
0
发表于 2013-12-03 15:21 |显示全部楼层
文库里的QT教程一个关于TCP通信的例程,client和server都使用QT编写是可以完成通信,并在UI上显示,但当server换成python编写的后,client接收到的报文就无法在UI上显示了,socket流读取是使用QDataStream类。
来看代码吧:
#include "widget.h"
#include "ui_widget.h"
#include <QtNetwork>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    tcpSocket = new QTcpSocket(this);
    connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readMessage()));
    connect(tcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),
            this,SLOT(displayError(QAbstractSocket::SocketError)));
}


void Widget::newConnect()
{
    blockSize = 0;  //初始化为0
    tcpSocket->abort(); //取消已有的连接
    tcpSocket->connectToHost(ui->hostLineEdit->text(),
                             ui->portLineEdit->text().toInt());
    //连接到主机,这里重界面获取主机地址和端口号
}

void Widget::readMessage()
{

    QDataStream in(tcpSocket);
    in.setVersion(QDataStream:t_4_; //设置数据流版本,这里要和服务器端相同
    if(blockSize==0)    //如果是刚开始接收数据
        {
        //判断接收的数据是否有两个字节,也就是文件信息的大小
        //如果有则保存到blockSize变量中,没有则返回,继续接收数据
        if(tcpSocket->bytesAvailable() < (int)sizeof(quint16)) return;
        in >> blockSize;
        ui->messageLabel->setIndent(blockSize);
    }

    if(tcpSocket->bytesAvailable() < blockSize) return;
    //如果没有得到全部的数据,则返回,继续接收数据

     in >> aob;
     ui->messageLabel->setText(aob);
    //显示数据
    //这个函数实现了数据的接收,它与服务器端的发送函数相对应。首先我们要获取文件的大小信息,然后根据文件的大小来判断是否接收到了完整的文件
}

//实现displayError函数。

void Widget::displayError(QAbstractSocket::SocketError)
{
    qDebug() << tcpSocket->errorString();   //输出错误信息
}

void Widget:n_pushButton_clicked()
{
    newConnect();   //请求连接
}


Widget::~Widget()
{
    delete ui;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP