QTcpSocket
— это класс из модуля QtNetwork, предоставляющий интерфейс для TCP-соединений. Он позволяет:
- Подключаться к серверу по IP/хосту и порту
- Отправлять и принимать данные
- Обрабатывать сетевые ошибки
- Использовать сигналы и слоты для асинхронного взаимодействия
Подключение библиотеки
Для начала убедитесь, что в вашем .pro
-файле подключен модуль network
:
QT += network
Простой пример TCP-клиента
#include <QTcpSocket> #include <QHostAddress> #include <QDebug> class TcpClient : public QObject { Q_OBJECT public: TcpClient(QObject* parent = nullptr) : QObject(parent) { connect(&socket, &QTcpSocket::connected, this, &TcpClient::onConnected); connect(&socket, &QTcpSocket::readyRead, this, &TcpClient::onReadyRead); connect(&socket, &QTcpSocket::disconnected, this, &TcpClient::onDisconnected); connect(&socket, &QTcpSocket::errorOccurred, this, &TcpClient::onError); } void connectToServer(const QString& host, quint16 port) { socket.connectToHost(host, port); } void sendMessage(const QString& message) { socket.write(message.toUtf8()); } private slots: void onConnected() { qDebug() << "Подключено к серверу!"; sendMessage("Привет от клиента!"); } void onReadyRead() { QByteArray data = socket.readAll(); qDebug() << "Получено:" << data; } void onDisconnected() { qDebug() << "Отключено от сервера."; } void onError(QAbstractSocket::SocketError socketError) { qDebug() << "Ошибка:" << socket.errorString(); } private: QTcpSocket socket; };
Полезные сигналы и методы
Метод / Сигнал | Назначение |
---|---|
connectToHost() | Устанавливает соединение с сервером |
disconnectFromHost() | Разрывает соединение |
write(const QByteArray&) | Отправляет данные |
readAll() | Считывает все доступные данные |
readyRead() | Сигнал — данные пришли |
connected() | Сигнал — соединение установлено |
disconnected() | Сигнал — соединение закрыто |
errorOccurred(QAbstractSocket::SocketError) | Сигнал об ошибке |
Обработка ошибок
Не забывайте обрабатывать ошибки. Они могут возникать при:
- Недоступности сервера
- Потере соединения
- Неправильных данных
Пример:
void onError(QAbstractSocket::SocketError socketError) { qDebug() << "Ошибка:" << socket.errorString(); }
Подключение к локальному серверу
client.connectToServer("127.0.0.1", 12345);
QTcpSocket
— один из самых удобных инструментов для создания TCP-клиентов в C++ с использованием Qt. Он идеально подходит для чатов, удаленного управления, обмена данными между машинами и даже базовой телеметрии.
Qt берет на себя большую часть низкоуровневой работы, позволяя вам сосредоточиться на логике приложения.