Το Qt Network μπορεί να διαπραγματευτεί SOCKS5 απευθείας για ένα socket TCP. Σε υπάρχουσα εφαρμογή Qt, ρυθμίστε το socket πριν από τη σύνδεση:

QNetworkProxy proxy(
    QNetworkProxy::Socks5Proxy,
    "proxy.example.net",
    1080
);

socket.setProxy(proxy);
socket.connectToHost("service.example.net", 12345);

Το socket είναι ένα υπάρχον QTcpSocket. Ο προορισμός και η θύρα του παραδείγματος αντιπροσωπεύουν την υπηρεσία TCP της εφαρμογής. Το Qt φτάνει πρώτα στον διαμεσολαβητή και μετά του ζητά να συνδεθεί σε αυτόν τον προορισμό. Για μια δημόσια προσβάσιμη υπηρεσία TCP όπου επιτρέπεται δημόσιος μεσάζων, η λίστα διαμεσολαβητών SOCKS5 παρέχει υποψηφίους για αυτό το παράδειγμα χωρίς λογαριασμό διαμεσολαβητή. Βεβαιωθείτε ότι ο υποψήφιος επιτρέπει τον πραγματικό κεντρικό υπολογιστή και τη θύρα της υπηρεσίας.

Τα συνήθη ασύγχρονα σήματα socket εξακολουθούν να ισχύουν: περιμένετε το connected() πριν ανταλλάξετε δεδομένα εφαρμογής και χειριστείτε το errorOccurred(). Κρατήστε το αντικείμενο socket ζωντανό όσο η σύνδεση χρησιμοποιείται. Για κώδικα που μπλοκάρει, χρησιμοποιήστε αντ' αυτού τις τεκμηριωμένες μεθόδους αναμονής του Qt με σκόπιμο χρονικό όριο.

Αυτό απαιτεί Qt Network, όχι GUI βασισμένο σε widgets. Η ρητή ρύθμιση ανήκει σε αυτό το socket. Άλλα socket μπορούν να διατηρήσουν τις προεπιλογές της εφαρμογής ή να επιλέξουν άλλον διαμεσολαβητή. Για να γίνει αυτό το socket άμεσο, ορίστε τον τύπο διαμεσολαβητή του σε QNetworkProxy::NoProxy πριν από τη σύνδεση.

Σχετικά άρθρα