在 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
运行
- 首先运行 udp_server,在控制台中应显示 "UDP Server is running on port 1234."
- 然后运行 udp_client,它将发送消息到服务器,并在控制台中打印服务器的响应。
总结
以上代码展示了如何在 Qt 中实现一个简单的 UDP 客户端和服务器。服务器监听特定端口,接收客户端的消息,并将其回显。客户端发送一条消息,并等待响应。你可以根据需要对其进行扩展和修改以适应实际应用。