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 берет на себя большую часть низкоуровневой работы, позволяя вам сосредоточиться на логике приложения.
