1.UdpServer
1.构建udp套接字
socket = new QUdpSocket;
2.绑定,将ip和port共享到网络:
bind();
socket->bind(QHostAddress::AnyIPv4, ui->lineEdit->text().toInt())
3.接收数据
readDatagram() :udp的接收数据
参数1:保存读取的数据的首地址 参数2:要读取的字节数
参数3:保存数据来源的主机ip的首地址 参数4:保存数据来源的主机port的首地址
eg:
在成员中定义:
QHostAddress addr;
quint16 port;
char buf[32] = {0};
socket->readDatagram(buf, sizeof(buf), &addr, &port);
ui->textEdit->insertPlainText(addr.toString() + ":" + QString(buf) + "\n");
4.发送数据
writeDatagram(): 发送数据到另外一端
参数1:发送的数据 参数2:数据接收端的ip地址 参数3:数据接收端的端口号
socket->writeDatagram(ui->textEdit_2->toPlainText().toLatin1(),addr, port);
eg:
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QUdpSocket>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_pushButton_clicked();
void recvData();
void on_pushButton_2_clicked();
private:
Ui::Widget *ui;
QUdpSocket *socket;
QHostAddress addr;
quint16 port;
};
#endif
widget.c
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
socket = new QUdpSocket;
connect(socket, &QUdpSocket::readyRead, this, &Widget::recvData);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
if(socket->bind(QHostAddress::AnyIPv4, ui->lineEdit->text().toInt()))
ui->pushButton->setDisabled(true);
}
void Widget::recvData()
{
char buf[32] = {0};
socket->readDatagram(buf, sizeof(buf), &addr, &port);
ui->textEdit->insertPlainText(addr.toString() + ":" + QString(buf) + "\n");
}
#include <QDebug>
void Widget::on_pushButton_2_clicked()
{
qDebug() << socket->writeDatagram(ui->textEdit_2->toPlainText().toLatin1(),
addr, port);
qDebug() << "size: " << ui->textEdit_2->toPlainText().size();
}
2.UdpClient
1.构建套接字
socket = new QUdpSocket;
2.发送数据
socket->writeDatagram(ui->textEdit_2->toPlainText().toLatin1(),
QHostAddress(ui->lineEdit->text()),
ui->lineEdit_2->text().toUInt());
3.接收数据
char buf[32] = {0};
socket->readDatagram(buf, sizeof(buf));
ui->textEdit->insertPlainText(QString(buf) + "\n");
eg:
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QUdpSocket>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_pushButton_clicked();
void recvData();
private:
Ui::Widget *ui;
QUdpSocket *socket;
};
#endif
widget.c
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
socket = new QUdpSocket;
connect(socket, &QUdpSocket::readyRead, this, &Widget::recvData);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
socket->writeDatagram(ui->textEdit_2->toPlainText().toLatin1(),
QHostAddress(ui->lineEdit->text()),
ui->lineEdit_2->text().toUInt());
}
#include <QDebug>
void Widget::recvData()
{
char buf[32] = {0};
socket->readDatagram(buf, sizeof(buf));
ui->textEdit->insertPlainText(QString(buf) + "\n");
}