UDP通信
new出套接字
绑定端口
书写报文 writeDatagram
ReadyRead监听信号
读取报文
报文长度 qint64 size = udp->pendingDatagramSize();
同步聊天记录
main.cpp
#include "udp1.h"
#include <QApplication>
#include "udp2.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Udp1 w;
w.show();
Udp2 u2;
u2.show();
return a.exec();
}
udp1.h
#ifndef UDP1_H
#define UDP1_H
#include <QWidget>
#include <QUdpSocket>
namespace Ui {
class Udp1;
}
class Udp1 : public QWidget
{
Q_OBJECT
public:
explicit Udp1(QWidget *parent = 0);
~Udp1();
private:
Ui::Udp1 *ui;
public:
//套接字
QUdpSocket * udp;
};
#endif // UDP1_H
udp1.cpp
#include "udp1.h"
#include "ui_udp1.h"
Udp1::Udp1(QWidget *parent) :
QWidget(parent),
ui(new Ui::Udp1)
{
ui->setupUi(this);
//初始化属性
ui->myPort->setText("8888");
ui->toPort->setText("9999");
ui->toIp->setText("127.0.0.1");
//创建套接字
udp = new QUdpSocket(this);
//绑定自身端口号
udp->bind(ui->myPort->text().toInt());
//点击发送按钮,发送报文
connect(ui->sendBtn,&QPushButton::clicked,[=](){
//书写报文 参数1 内容 2 对方Ip 3 对方端口
udp->writeDatagram(ui->input->toPlainText().toUtf8(),QHostAddress(ui->toIp->text()),ui->toPort->text().toInt());
ui->record->append("my Say :"+ui->input->toPlainText());
//清空输入框
ui->input->clear();
});
//接受数据
connect(udp,&QUdpSocket::readyRead,[=](){
//获取到报文长度
qint64 size = udp->pendingDatagramSize();
QByteArray array = QByteArray(size,0);
//读取报文
udp->readDatagram( array.data() , size );
//将数据同步到聊天记录中
ui->record->append(array);
});
}
Udp1::~Udp1()
{
delete ui;
}
udp2.h
#ifndef UDP2_H
#define UDP2_H
#include <QWidget>
#include <QUdpSocket>
namespace Ui {
class Udp2;
}
class Udp2 : public QWidget
{
Q_OBJECT
public:
explicit Udp2(QWidget *parent = 0);
~Udp2();
private:
Ui::Udp2 *ui;
public:
QUdpSocket * udp;
};
#endif // UDP2_H
udp2.cpp
#include "udp2.h"
#include "ui_udp2.h"
Udp2::Udp2(QWidget *parent) :
QWidget(parent),
ui(new Ui::Udp2)
{
ui->setupUi(this);
//初始化属性
ui->myPort->setText("9999");
ui->toPort->setText("8888");
ui->toIp->setText("127.0.0.1");
//创建套接字
udp = new QUdpSocket(this);
//绑定自身端口号
udp->bind(ui->myPort->text().toInt());
//点击发送按钮,发送报文
connect(ui->sendBtn,&QPushButton::clicked,[=](){
//书写报文 参数1 内容 2 对方Ip 3 对方端口
udp->writeDatagram(ui->input->toPlainText().toUtf8(),QHostAddress(ui->toIp->text()),ui->toPort->text().toInt());
ui->record->append("my Say :"+ui->input->toPlainText());
//清空输入框
ui->input->clear();
});
//接受数据
connect(udp,&QUdpSocket::readyRead,[=](){
//获取到报文长度
qint64 size = udp->pendingDatagramSize();
QByteArray array = QByteArray(size,0);
//读取报文
udp->readDatagram( array.data() , size );
//将数据同步到聊天记录中
ui->record->append(array);
});
}
Udp2::~Udp2()
{
delete ui;
}