Aprire uno stream TCP tramite SOCKS5 con Qt
Impostate il proxy esplicito di QTcpSocket prima di connettervi alla destinazione, usando Qt Network senza requisiti GUI.
Qt Network può negoziare SOCKS5 direttamente per un socket TCP. In un'applicazione Qt esistente, configurare il socket prima della connessione:
QNetworkProxy proxy(
QNetworkProxy::Socks5Proxy,
"proxy.example.net",
1080
);
socket.setProxy(proxy);
socket.connectToHost("service.example.net", 12345);
socket è un QTcpSocket esistente. La destinazione e la porta dell'esempio rappresentano il servizio TCP dell'applicazione. Qt raggiunge prima il proxy, poi gli chiede di connettersi a quella destinazione. Per un servizio TCP raggiungibile pubblicamente dove è consentito un intermediario pubblico, la lista di proxy SOCKS5 fornisce candidati per questo esempio senza account proxy. Verificate che il candidato consenta l'host e la porta effettivi del servizio.
I normali segnali asincroni del socket valgono ancora: attendete connected() prima di scambiare dati dell'applicazione e gestite errorOccurred(). Mantenete vivo l'oggetto socket finché la connessione è in uso. Per il codice bloccante, usate invece i metodi di attesa documentati di Qt con un timeout deliberato.
Questo richiede Qt Network, non una GUI basata su widget. L'impostazione esplicita appartiene a questo socket. Altri socket possono mantenere i valori predefiniti dell'applicazione o scegliere un altro proxy. Per rendere diretto questo socket, impostate il suo tipo di proxy su QNetworkProxy::NoProxy prima della connessione.