使用Qt实现UDP通讯 一、介绍UDP是一个无连接协议传输数据之前源端和终端不建立连接当它想传送时就简单地去抓取来自应用程序的数据并尽可能快地把它扔到网络上。由于传输数据不建立连接因此也就不需要维护连接状态包括收发状态等因此一台服务机可同时向多个客户机传输相同的消息。这样就极大地减少了系统开销降低了流媒体的误码率和丢包率并保证了流媒体播放的平滑性。1、使用时需要在项目的pro中增加 QTnetwork2、使用到UDP通讯类QUdpSocket3、服务器端需要绑定固定端口4、客户端向服务器绑定的端口发送数据5、服务器根据客户端连接过的IP和端口向客户端发送数据6、使用QVariant在comboBox中保存客户端IP和端口二、服务器代码#include MainWindow.h #include ui_MainWindow.h MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui-setupUi(this); setWindowTitle(服务器8888); connect(ui-pbSend,SIGNAL(clicked()),this,SLOT(onBtnSendClick())); //创建socket m_pUdpSocket new QUdpSocket(this); //绑定服务器端的端口,只需要绑定服务器端的IP和端口客户端就可以和服务器通讯服务器可以根据接收到的客户端消息向对应的客户端发送消息 m_pUdpSocket-bind(8888); //收数据 connect(m_pUdpSocket,QUdpSocket::readyRead,[](){ char buff[1024] {0}; QHostAddress ip; quint16 port; m_pUdpSocket-readDatagram(buff,1023,ip,port);//读取客户端对象的数据、ip、端口 AddComboBox(ip,port); QString str QString([%1:%2]:%3).arg(ip.toString()).arg(port).arg(buff); ui-textEditReceive-append(str); }); } MainWindow::~MainWindow() { delete m_pUdpSocket; delete ui; } void MainWindow::onBtnSendClick() { QVariant ipValue ui-cbbClient-currentData(); IPInfo info ipValue.valueIPInfo(); QString msg ui-textEditSend-toPlainText(); m_pUdpSocket-writeDatagram(msg.toUtf8(),info.ipAddress,info.port); } void MainWindow::AddComboBox(QHostAddress ipAddress, quint16 port) { IPInfo info; info.ipAddress ipAddress; info.port port; QString str QString(%1:%2).arg(info.ipAddress.toString()).arg(info.port); QVariant ipValue QVariant::fromValue(info); int index ui-cbbClient-findText(str); if(index -1) { ui-cbbClient-addItem(str,ipValue); } }三、客户端#include MainWindow.h #include ui_MainWindow.h MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui-setupUi(this); setWindowTitle(客户端); connect(ui-pbSend,SIGNAL(clicked()),this,SLOT(onBtnSendClick())); m_pUdpSocket new QUdpSocket(this); //接收数据接收方法和服务器代码一样 connect(m_pUdpSocket,QUdpSocket::readyRead,[](){ char buff[1024] {0}; QHostAddress ip; quint16 port; m_pUdpSocket-readDatagram(buff,1023,ip,port);//读数据 ui-lineEditIP-setText(ip.toString()); ui-lineEditPort-setText(QString::number(port)); QString str QString([%1:%2]:%3).arg(ip.toString()).arg(port).arg(buff); ui-textEditReceive-append(str); }); } MainWindow::~MainWindow() { delete m_pUdpSocket; delete ui; } void MainWindow::onBtnSendClick() { QString ip ui-lineEditIP-text(); QString port ui-lineEditPort-text(); QString msg ui-textEditSend-toPlainText(); m_pUdpSocket-writeDatagram(msg.toUtf8(),QHostAddress(ip),port.toUInt()); }四、效果源代码地址使用Qt开发的UDP通讯的简单代码示例资源-CSDN文库