
UDP通信是无连接的,与TCP通信相比,少了一步建立连接的过程,只要经过绑定,就可以直接进行数据的发送和接收。
在Qt的UDP通信中,由于少了连接这一个步骤,客户端和服务端没有太大区别,所以也可以看作只有发送端和接收端。无论是发送端还是接收端,都只有一个套接字,也就是QUdpSocket。此外,UDP通信中没有监听listen(),只有绑定bind(),往套接字中读写数据用的是readDatagram()和writeDatafram(),关闭套接字时同样是调用close()。
P.S:datagram是数据报 / 数据包 / 数据报文的意思
和TCP相同的地方是,发送端向接收端发送数据时,会触发接收端的readyRead()信号。
UDP收发消息的实现
首先,为了方便测试需要绘制两个窗口,在它们之间互相通信:
//WidgetA.h
#ifndef WIDGETA_H
#define WIDGETA_H
#include <QWidget>
#include <QLineEdit>
#include <QPushButton>
#include <QTextEdit>
class WidgetA : public QWidget
{
Q_OBJECT
public:
WidgetA(QWidget *parent = 0);
~WidgetA();
private:
QLineEdit *p_ipEdit;
QLineEdit *p_portEdit;
QPushButton *p_connectButton;
QTextEdit *p_sendBox;
QPushButton *p_sendButton;
QPushButton *p_closeButton;
};
#endif // WIDGETA_H
//WidgetA.cpp
#include "WidgetA.h"
#include <QGridLayout>
WidgetA::WidgetA(QWidget *parent)
: QWidget(parent)
{
this->resize(640,480);
this->move(300,300);
this->setWindowTitle("Port 9999");
QGridLayout *p_layout=new QGridLayout(this);
p_ipEdit=new QLineEdit(this);
p_portEdit=new QLineEdit(this);
p_sendBox=new QTextEdit(this);
p_sendButton=new QPushButton("send",this);
p_closeButton=new QPushButton("close",this);
p_layout->addWidget(p_ipEdit,0,0,1,10);
p_layout->addWidget(p_portEdit,1,0,1,10);
p_layout->addWidget(p_sendBox,2,0,8,10);
p_layout->addWidget(p_sendButton,10,0,1,2

本文深入讲解了Qt中UDP通信的实现细节,包括bind(), readDatagram(), writeDatagram(), close()等关键函数的使用,以及UDP广播和组播的原理与实践。
最低0.47元/天 解锁文章
1122





