QTcpSocket

Автор: | 5 июня, 2025

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