首先
一定要在.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