Qt TCP 客户端和服务端通信示例
以下是一个简单的 Qt TCP 客户端和服务端通信例子:
服务端代码:
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>
class Server : public QObject
{
Q_OBJECT
public:
explicit Server(QObject *parent = nullptr)
: QObject(parent), m_server(new QTcpServer(this))
{
connect(m_server, &QTcpServer::newConnection, this, &Server::handleNewConnection);
m_server->listen(QHostAddress::Any, 1234); // 监听本地1234端口
}
private slots:
void handleNewConnection()
{
QTcpSocket *socket = m_server->nextPendingConnection();
connect(socket, &QTcpSocket::readyRead, this, &Server::handleReadyRead);
connect(socket, &QTcpSocket::disconnected, this, &Server::handleDisconnected);
}
void handleReadyRead()
{
QTcpSocket *socket = qobject_cast<QTcpSocket*>(sender());
if (socket) {
QByteArray data = socket->readAll();
// 处理接收到的数据...
qDebug() << 'Received data:' << data;
}
}
void handleDisconnected()
{
QTcpSocket *socket = qobject_cast<QTcpSocket*>(sender());
if (socket) {
socket->deleteLater();
}
}
private:
QTcpServer *m_server;
};
客户端代码:
#include <QtNetwork/QTcpSocket>
class Client : public QObject
{
Q_OBJECT
public:
explicit Client(QObject *parent = nullptr)
: QObject(parent), m_socket(new QTcpSocket(this))
{
connect(m_socket, &QTcpSocket::connected, this, &Client::handleConnected);
connect(m_socket, &QTcpSocket::readyRead, this, &Client::handleReadyRead);
connect(m_socket, &QTcpSocket::disconnected, this, &Client::handleDisconnected);
m_socket->connectToHost('localhost', 1234); // 连接到本地1234端口
}
void sendData(const QByteArray &data)
{
if (m_socket->state() == QAbstractSocket::ConnectedState) {
m_socket->write(data);
m_socket->flush();
}
}
private slots:
void handleConnected()
{
// 连接成功
qDebug() << 'Connected to server';
}
void handleReadyRead()
{
QByteArray data = m_socket->readAll();
// 处理接收到的数据...
qDebug() << 'Received data:' << data;
}
void handleDisconnected()
{
// 连接断开
qDebug() << 'Disconnected from server';
}
private:
QTcpSocket *m_socket;
};
使用方法:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 启动服务端
Server server;
// 创建客户端并发送数据
Client client;
client.sendData('Hello, server!');
return a.exec();
}
这个例子中,服务端监听本地1234端口,客户端连接到该端口,并发送数据。服务端收到数据后输出,客户端收到数据后也输出。
原文地址: https://www.cveoy.top/t/topic/lQPi 著作权归作者所有。请勿转载和采集!