Qt中的Udp

首先

一定要在.pro文件中加上 QT += network
这是为了增加 网络通信模块

主界面

这是界面其实只是一个按键触发,跳转到udp的界面,有无皆可

#include "widget.h"
#include "ui_widget.h"
#include "udp.h"
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{

    delete ui;
}

//调用upd界面
void Widget::on_pushButton_talk_clicked()
{
    Udp *udp=new Udp;
    udp->show();
  }

udp界面

#include "udp.h"
#include "ui_udp.h"
#include<QMessageBox>//消息对话框
Udp::Udp(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Udp)
{
    ui->setupUi(this);
    UdpSocket =new QUdpSocket(this);//建立UDP套接字对象
    //链接信号槽
    connect(ui->pushButton_bind,SIGNAL(clicked(bool)),SLOT(slot_pushButton_bind()));绑定按钮,触发函数
    connect(ui->pushButton_send,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_send()));//发送按钮,绑定发送
    connect(UdpSocket,SIGNAL(readyRead()),this,SLOT(slot_UdpSocket_readyRead()));//套接字读取,接收套接字
}

Udp::~Udp()
{
    delete ui;
}
//绑定
void Udp::slot_pushButton_bind()
{
    QString ip=ui->lineEdit_ip1->text();//获取ip地址
    int port =ui->lineEdit_port1->text().toInt();//获取对方端口号
   
    if(ip.isEmpty()==true)
    {
        ok=UdpSocket->bind(port);//绑定成功返回true
    }
    else
    {
        ok=UdpSocket->bind(QHostAddress(ip),port);//绑定失败返回false
    }
    //确认检查是否成功绑定
    if(ok==true)
    {
        ui->pushButton_bind->setText("绑定成功");
        ui->textEdit_receive->setText("绑定成功\t地址:"+ip+"\t 端口:"+QString::number(port));
         ui->pushButton_bind->setEnabled(false);
    }
    else
    {
        //绑定失败,警告
        QMessageBox::warning(this,"绑定警告","绑定失败,端口号或被使用");
    }
}

//发送
void Udp::slot_pushButton_send()
{
    QString ip=ui->lineEdit_ip2->text();
    int port =ui->lineEdit_port2->text().toInt();
    QString text=ui->textEdit_send->toPlainText();
    UdpSocket->writeDatagram(text.toUtf8(),QHostAddress(ip),port);

}

//读取
void Udp::slot_UdpSocket_readyRead()
{
     char *buf =new char[1024];//申请空间存放
     memset(buf,0,1024);
    QHostAddress host;//放置对方主机地址
    quint16 port;//端口
    UdpSocket->readDatagram(buf,1024,&host,&port);
    ui->textEdit_receive->append(buf);//追加写入文本中
    delete buf;//释放空间
}



这里是头文件

在这里插入代码片
#ifndef UDP_H
#define UDP_H

#include <QWidget>
#include<QUdpSocket>//网络模块
#include<QMessageBox>//消息框
namespace Ui {
class Udp;
}

class Udp : public QWidget
{
    Q_OBJECT

public:
    explicit Udp(QWidget *parent = nullptr);
    ~Udp();

private:
    Ui::Udp *ui;
     bool ok=false;//用于按键是否绑定
    QUdpSocket *UdpSocket;//UDP网络套接字对象
public slots:
    void slot_pushButton_bind();//绑定
    void slot_pushButton_send();//发送
    void slot_UdpSocket_readyRead();//读取
};

#endif // UDP_H

主界面显示

主界面

提示窗口

在这里插入图片描述

通信

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值