Einen TCP-Stream über SOCKS5 mit Qt öffnen
Setzen Sie den expliziten Proxy von QTcpSocket, bevor die Verbindung zum Ziel aufgebaut wird, mit Qt Network ohne GUI-Zwang.
Qt Network kann SOCKS5 für einen TCP-Socket direkt aushandeln. In einer bestehenden Qt-Anwendung wird der Socket vor dem Verbindungsaufbau konfiguriert:
QNetworkProxy proxy(
QNetworkProxy::Socks5Proxy,
"proxy.example.net",
1080
);
socket.setProxy(proxy);
socket.connectToHost("service.example.net", 12345);
socket ist ein vorhandener QTcpSocket. Ziel und Port im Beispiel stehen für den TCP-Dienst der Anwendung. Qt erreicht zuerst den Proxy und fordert ihn dann auf, eine Verbindung zu diesem Ziel herzustellen. Für einen öffentlich erreichbaren TCP-Dienst, bei dem ein öffentlicher Vermittler zulässig ist, liefert die SOCKS5-Proxy-Liste Kandidaten für dieses Beispiel ohne Proxy-Konto. Prüfen Sie, ob der Kandidat den tatsächlichen Host und Port des Dienstes zulässt.
Die üblichen asynchronen Socket-Signale gelten weiterhin: Warten Sie auf connected(), bevor Anwendungsdaten ausgetauscht werden, und behandeln Sie errorOccurred(). Halten Sie das Socket-Objekt am Leben, solange die Verbindung genutzt wird. Für blockierenden Code verwenden Sie stattdessen die dokumentierten Wartemethoden von Qt mit einem bewusst gesetzten Timeout.
Dies erfordert Qt Network, keine GUI auf Widgets-Basis. Die explizite Einstellung gehört zu diesem Socket. Andere Sockets können ihre Anwendungsstandards behalten oder einen anderen Proxy wählen. Um genau diesen Socket direkt zu machen, setzen Sie seinen Proxy-Typ vor dem Verbindungsaufbau auf QNetworkProxy::NoProxy.