Otwieranie strumienia TCP przez SOCKS5 w Qt
Ustaw jawny serwer proxy QTcpSocket przed połączeniem z miejscem docelowym, używając Qt Network bez wymogu GUI.
Qt Network potrafi bezpośrednio negocjować SOCKS5 dla gniazda TCP. W istniejącej aplikacji Qt skonfiguruj gniazdo przed połączeniem:
QNetworkProxy proxy(
QNetworkProxy::Socks5Proxy,
"proxy.example.net",
1080
);
socket.setProxy(proxy);
socket.connectToHost("service.example.net", 12345);
socket to istniejące QTcpSocket. Miejsce docelowe i port z przykładu oznaczają usługę TCP aplikacji. Qt najpierw dociera do proxy, a następnie prosi je o połączenie z tym miejscem docelowym. Dla publicznie dostępnej usługi TCP, gdy dozwolony jest publiczny pośrednik, lista proxy SOCKS5 dostarcza kandydatów dla tego przykładu bez konta proxy. Potwierdź, że kandydat zezwala na rzeczywisty host i port usługi.
Zwykłe asynchroniczne sygnały gniazda nadal obowiązują: poczekaj na connected() przed wymianą danych aplikacji i obsłuż errorOccurred(). Utrzymuj obiekt gniazda przy życiu, dopóki połączenie jest używane. W kodzie blokującym użyj zamiast tego udokumentowanych metod oczekiwania Qt z celowo ustawionym limitem czasu.
Wymaga to Qt Network, a nie GUI opartego na widgetach. To jawne ustawienie należy do tego gniazda. Inne gniazda mogą zachować ustawienia domyślne aplikacji lub wybrać inne proxy. Aby właśnie to gniazdo było bezpośrednie, ustaw jego typ proxy na QNetworkProxy::NoProxy przed połączeniem.