Может кто-нибудь, пожалуйста, сообщите, какая разница между соединениями SOCKS, DIRECT и HTTP в контексте программирования сокетов?
В частности, я имею в виду классы сокетов Android перечисление типа прокси, но представьте, что этот вопрос относится к другим языкам.
Когда вы пишете приложение, использующее сокет для связи с Интернетом в целом, в частности все, что хочет использовать HTTP, вы можете быть в одной из трех разных ситуаций:
Направление соединения с Интернетом - вы можете установить соединение TCP/IP непосредственно с сервером на другом конце.
Соединение через прокси SOCKS - вы не можете установить прямое подключение к серверу в конце. Вместо этого вам необходимо связаться с локальным шлюзом шлюза локальной сети с использованием протокола SOCKS и попросить его открыть соединение с сервером в конце, откройте сокет на прокси-сервере SOCKS и попросите его исправить вас до сервера путем пересылки трафика между вами и целевой сервер, предполагая, что локальная политика безопасности позволяет это.
Подключение через прокси-сервер HTTP - вы либо не можете установить прямое подключение к Интернету, либо полезно использовать прокси для повышения производительности (кэширования). Еще раз, вместо того, чтобы открывать соединение с сервером на другом конце, вы открываете соединение с прокси-сервером HTTP рядом с вами (которое может или может быть в вашей локальной сети) по протоколу HTTP, и попросите его провести от вашего имени HTTP-транзакция с конечным устройством.
Это 3 ситуации, описанные значениями перечисления.
В действительности существует 4-я ситуация - прозрачная прокси, но поскольку название подразумевает, что ваш код не знает об этом, поэтому он не представлен значением перечисления. В этой ситуации вы действуете согласно сценарию 1 (направление соединения), но на самом деле вы находитесь в сценарии 3 (HTTP-прокси). Перенаправление с вашего целевого сервера на прокси-сервер HTTP осуществляется прозрачно сетевым оборудованием в локальной сети (обычно это маршрутизатор, когда-то коммутатор).