Een TCP-stream openen via SOCKS5 met Qt
Stel de expliciete proxy van QTcpSocket in voordat je verbinding maakt met de bestemming, met Qt Network zonder GUI-vereiste.
Qt Network kan SOCKS5 rechtstreeks onderhandelen voor een TCP-socket. Stel in een bestaande Qt-applicatie de socket in voordat je verbinding maakt:
QNetworkProxy proxy(
QNetworkProxy::Socks5Proxy,
"proxy.example.net",
1080
);
socket.setProxy(proxy);
socket.connectToHost("service.example.net", 12345);
socket is een bestaande QTcpSocket. De bestemming en poort in het voorbeeld staan voor de TCP-dienst van de applicatie. Qt bereikt eerst de proxy en vraagt die vervolgens verbinding te maken met die bestemming. Voor een publiek bereikbare TCP-dienst waarbij een publieke tussenpartij is toegestaan, levert de SOCKS5-proxylijst kandidaten voor dit voorbeeld zonder proxyaccount. Controleer dat de kandidaat de werkelijke host en poort van de dienst toestaat.
De normale asynchrone socketsignalen gelden nog steeds: wacht op connected() voordat je applicatiegegevens uitwisselt, en behandel errorOccurred(). Houd het socketobject in leven zolang de verbinding in gebruik is. Gebruik voor blokkerende code in plaats daarvan de gedocumenteerde wachtmethoden van Qt met een bewust gekozen time-out.
Dit vereist Qt Network, geen GUI op basis van widgets. De expliciete instelling hoort bij deze socket. Andere sockets kunnen de standaardwaarden van de applicatie behouden of een andere proxy kiezen. Om juist deze socket direct te laten gaan, stel je het proxytype in op QNetworkProxy::NoProxy voordat je verbinding maakt.