Qt实现UDP客户端和服务端

Qt 中实现 UDP 客户端和服务器相对简单,我们可以使用 QUdpSocket 类来完成。以下是一个基本的例子,包括 UDP 服务器和客户端的实现。

UDP 服务端实现

首先,创建一个简单的 UDP 服务器,例如 udp_server.cpp:

cpp

#include <QUdpSocket>  #include <QCoreApplication>  #include <iostream>  

class UdpServer : public QObject {  

    Q_OBJECT  public:  

    UdpServer(QObject *parent = nullptr) : QObject(parent) {  

        udpSocket = new QUdpSocket(this);  

        udpSocket->bind(QHostAddress::Any, 1234);  

 

        connect(udpSocket, &QUdpSocket::readyRead, this, &UdpServer::onReadyRead);  

        

        std::cout << "UDP Server is running on port 1234." << std::endl;  

    }  

private slots:  

    void onReadyRead() {  

        while (udpSocket->hasPendingDatagrams()) {  

            QByteArray buffer;  

            buffer.resize(udpSocket->pendingDatagramSize());  

            QHostAddress sender;  

            quint16 senderPort;  

 

            udpSocket->readDatagram(buffer.data(), buffer.size(), &sender, &senderPort);  

            std::cout << "Received from " << sender.toString().toStdString()   

                      << ":" << senderPort << " - " << buffer.toStdString() << std::endl;  

 

            // Echo the message back  

            udpSocket->writeDatagram("Hello from server", sender, senderPort);  

        }  

    }  

private:  

    QUdpSocket *udpSocket;  

};  

int main(int argc, char *argv[]) {  

    QCoreApplication app(argc, argv);  

 

    UdpServer server;  

 

    return app.exec();  

}  

#include "udp_server.moc"  

UDP 客户端实现

接下来,创建一个简单的 UDP 客户端,例如 udp_client.cpp:

cpp

#include <QUdpSocket>  #include <QCoreApplication>  #include <iostream>  

class UdpClient : public QObject {  

    Q_OBJECT  public:  

    UdpClient(const QString &host, quint16 port, QObject *parent = nullptr) : QObject(parent) {  

        udpSocket = new QUdpSocket(this);  

        connect(udpSocket, &QUdpSocket::readyRead, this, &UdpClient::onReadyRead);  

 

        // Send message to the server  

        udpSocket->writeDatagram("Hello from client", QHostAddress(host), port);  

        std::cout << "Message sent to server." << std::endl;  

    }  

private slots:  

    void onReadyRead() {  

        while (udpSocket->hasPendingDatagrams()) {  

            QByteArray buffer;  

            buffer.resize(udpSocket->pendingDatagramSize());  

            QHostAddress sender;  

            quint16 senderPort;  

 

            udpSocket->readDatagram(buffer.data(), buffer.size(), &sender, &senderPort);  

            std::cout << "Received from server: " << buffer.toStdString() << std::endl;  

        }  

    }  

private:  

    QUdpSocket *udpSocket;  

};  

int main(int argc, char *argv[]) {  

    QCoreApplication app(argc, argv);  

 

    UdpClient client("127.0.0.1", 1234);  

 

    return app.exec();  

}  

#include "udp_client.moc"  

编译和运行

确保你的项目文件 .pro 中包含网络模块。在 .pro 文件中添加:

pro

QT += core network  

CONFIG += c++11  

然后使用 qmake 和 make 编译项目:

bash

qmake  

make  

运行

  1. 首先运行 udp_server,在控制台中应显示 "UDP Server is running on port 1234."
  2. 然后运行 udp_client,它将发送消息到服务器,并在控制台中打印服务器的响应。

总结

以上代码展示了如何在 Qt 中实现一个简单的 UDP 客户端和服务器。服务器监听特定端口,接收客户端的消息,并将其回显。客户端发送一条消息,并等待响应。你可以根据需要对其进行扩展和修改以适应实际应用。

 

posted @ 2025-02-26 10:02  远方是什么样子  阅读(261)  评论(0)    收藏  举报