Qt Network умеет напрямую согласовывать SOCKS5 для TCP-сокета. В существующем приложении Qt настройте сокет до подключения:

QNetworkProxy proxy(
    QNetworkProxy::Socks5Proxy,
    "proxy.example.net",
    1080
);

socket.setProxy(proxy);
socket.connectToHost("service.example.net", 12345);

socket — это существующий QTcpSocket. Адрес назначения и порт в примере обозначают TCP-сервис приложения. Qt сначала обращается к прокси, а затем просит его подключиться к этому адресу. Для публично доступного TCP-сервиса, где допускается публичный посредник, список SOCKS5-прокси даёт кандидатов для этого примера без прокси-аккаунта. Убедитесь, что кандидат разрешает фактические хост и порт сервиса.

Обычные асинхронные сигналы сокета по-прежнему действуют: дождитесь connected() перед обменом данными приложения и обработайте errorOccurred(). Держите объект сокета живым, пока соединение используется. Для блокирующего кода вместо этого применяйте документированные методы ожидания Qt с намеренно заданным тайм-аутом.

Здесь нужен Qt Network, а не GUI на основе виджетов. Эта явная настройка принадлежит данному сокету. Другие сокеты могут сохранять настройки приложения по умолчанию или выбирать другой прокси. Чтобы именно этот сокет шёл напрямую, задайте его тип прокси QNetworkProxy::NoProxy до подключения.

Похожие статьи