自学之路day02---qt小项目

三、Udp广播
简介:利用Udp通讯,完成本机的收发功能。
在这个学习过程,有一个问题,一直未能解决:
在我本机中,已经能够实现收发功能,但是,每次只有一个字符的显示,这是为什么?
步骤:

1. 绘制界面(本界面比较简单)
在这里插入图片描述
服务器界面
在这里插入图片描述
客户端界面
2. 服务器端代码:
1.构造函数中完成套接字,定时器已经定时器时间和槽函数的连接

{
    ui->setupUi(this);
    udpSocket = new QUdpSocket(this);
    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()),
            this, SLOT(sendMessage()));
    isStarted = false;
}
2.开始按钮槽函数的编写
void UdpDialog::on_pushButton_clicked()
{
    if(isStarted == false){
        isStarted = true;
        timer->start(1000);
        ui->pushButton->setText("停止");
        ui->messageEdit->setEnabled(false);
        ui->portEdit->setEnabled(false);
    }
    else{
        isStarted = false;
        timer->stop();
        ui->pushButton->setText("开始");
        ui->messageEdit->setEnabled(true);
        ui->portEdit->setEnabled(true);
    }
}
3.定时器所连接槽函数的编写
void UdpDialog::sendMessage()
{
    QString msg = ui->messageEdit->text();
    quint16 port = ui->portEdit->text().toShort();
    quint16 sizemsg = msg.size();
    udpSocket->writeDatagram(msg.toUtf8(),sizemsg,
                             QHostAddress::Broadcast,port);
}

3. 客户端代码:
①:构造函数,完成套接字的创建,按钮状态的初始化

{
    ui->setupUi(this);
    udpSocket = new QUdpSocket;
    isStarted = false;

}
②:开始按钮的槽函数
void RecDialog::on_pushButton_clicked()
{
    if(isStarted == false){
        isStarted = true;
        port = ui->lineEdit->text().toShort();
        udpSocket->bind(port);
        connect(udpSocket, SIGNAL(readyRead()),
                this, SLOT(messageReceive()));
        ui->lineEdit->setEnabled(false);
        ui->pushButton->setText("停止接收");
    }
    else{
        isStarted = false;
        udpSocket->close();
        ui->lineEdit->setEnabled(true);
        ui->pushButton->setText("开始接收");
    }
}
③:readReady对应槽函数的编写
 void RecDialog::messageReceive()
{
    if(udpSocket->hasPendingDatagrams()){
        QByteArray buffer;
        buffer.resize(udpSocket->hasPendingDatagrams());
        udpSocket->readDatagram(buffer.data(), buffer.size());
        ui->listWidget->addItem(buffer);
        ui->listWidget->scrollToBottom();
    }
}

4.总结
虽然能够实现最简单的功能了,但是单个字符的传输,我还是没能解决。
多看看帮助手册,确实会有收获!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值