Адкрыццё TCP-плыні праз SOCKS5 з дапамогай Qt
Задайце явны проксі для QTcpSocket перад падключэннем да прызначэння, выкарыстоўваючы Qt Network без патрабавання GUI.
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 на аснове widgets. Яўная налада належыць гэтаму сокету. Іншыя сокеты могуць захаваць налады праграмы па змаўчанні або выбраць іншы проксі. Каб зрабіць гэты сокет прамым, задайце яго тып проксі QNetworkProxy::NoProxy перад падключэннем.