QUdpSocket Class
qmake:
QT += network
Header:
#include<QUdpSocket>
具体如下: 我们需要以上三个属性,myPort(我的端口),toPort(对方端口),toIp(对方Ip)。 步骤如下: 1、初始化属性: 即myPort,toPort,toIp 2、创建套接字 3、绑定自身端口号 4、点击发送按钮发送报文 5、书写报文: 需要用到writeDatagram函数,该函数对应参数分别为 writeDatagram(书写内容,对方Ip,对方端口) 6、接受数据 connect(套接字,&QudpSocket::readyRead,this,[=] (){ 7、获取报文长度赋值给size(qint64类型) 8、读取报文:需要用到readDatagram函数,该函数对应参数分别为 readDatagram(数据,长度); 9、将数据同步到聊天记录中 通过appand()来添加到聊天记录中 }); 如下附上代码:
/*qudpdemo.cpp */
#include "qudpdemo.h"
#include "ui_qudpdemo.h"
QUdpdemo::QUdpdemo(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::QUdpdemo)
{
ui->setupUi(this);
//初始化属性
ui->line_myPort->setText("8888");
ui->line_toPort->setText("9999");
ui->line_toIp->setText("127.0.0.1");
//创建套接字
udp = new QUdpSocket(this);
//绑定自身端口号
udp->bind(ui->line_myPort->text().toInt());
//点击了发送按钮发送报文
connect(ui->btn_send,&QPushButton::clicked,this,[=](){
//书写报文 书写内容 对方IP 对方端口
udp->writeDatagram(ui->text_write->toPlainText().toUtf8(),QHostAddress(ui->line_toIp->text()),ui->line_toPort->text().toInt());
ui->text_communicateRem->append("I say: "+ui->text_write->toPlainText());
//清空输入框
ui->text_write->clear();
});
//接受数据
connect(udp,&QUdpSocket::readyRead,this,[=](){
//获取到报文长度
qint64 size = udp->pendingDatagramSize();
QByteArray array = QByteArray(size,0);
udp->readDatagram(array.data(),size);
//将数据同步聊天记录中
ui->text_communicateRem->append(array);
});
}
QUdpdemo::~QUdpdemo()
{
delete ui;
}~
/*secondpeople.cpp*/
#include "secondpeople.h"
#include "ui_secondpeople.h"
SecondPeople::SecondPeople(QWidget *parent) :
QWidget(parent),
ui(new Ui::SecondPeople)
{
ui->setupUi(this);
//初始化属性
ui->line_myPort->setText("9999");
ui->line_toPort->setText("8888");
ui->line_toIp->setText("127.0.0.1");
//创建套接字
udp1 = new QUdpSocket(this);
//绑定自身端口号
udp1->bind(ui->line_myPort->text().toInt());
//点击了发送按钮发送报文
connect(ui->btn_send,&QPushButton::clicked,this,[=](){
//书写报文 书写内容 对方IP 对方端口
udp1->writeDatagram(ui->text_write->toPlainText().toUtf8(),QHostAddress(ui->line_toIp->text()),ui->line_toPort->text().toInt());
ui->text_communicateRem->append("I say: "+ui->text_write->toPlainText());
//清空输入框
ui->text_write->clear();
});
//接受数据
connect(udp1,&QUdpSocket::readyRead,this,[=](){
//获取到报文长度
qint64 size = udp1->pendingDatagramSize();
QByteArray array = QByteArray(size,0);
udp1->readDatagram(array.data(),size);
//将数据同步聊天记录中
ui->text_communicateRem->append(array);
});
}
SecondPeople::~SecondPeople()
{
delete ui;
}
~
/*main.cpp*/
#include "qudpdemo.h"
#include "secondpeople.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QUdpdemo w;
w.show();
SecondPeople u2;
u2.show();
return a.exec();
}
~
|