套接字编程中SOCKS,DIRECT和HTTP之间的区别

Max*_*ich 1 java language-agnostic sockets android

有人可以请问在套接字编程的上下文中SOCKS,DIRECT和HTTP类型连接之间的区别是什么?

具体来说,我指的是Android套接字类代理类型枚举,但想象这个问题适用于其他语言.

gby*_*gby 7

当您使用套接字编写应用程序以与整个Internet进行通信时,特别是任何希望使用HTTP的应用程序时,您可能处于以下三种情况之一:

  1. 与Internet的方向连接 - 您可以在另一端直接与服务器建立TCP/IP连接.

  2. 通过SOCKS代理连接 - 您无法在末端建立与服务器的直接连接.相反,您需要使用SOCKS协议联系本地LAN安全网关计算机并要求它在最后打开与服务器的连接,打开SOCKS代理服务器的套接字并通过转发您之间的流量将其修补到服务器和目标服务器,假设本地安全策略允许.

  3. 通过HTTP代理连接 - 您要么无法建立到Internet的直接连接,要么使用代理来提高性能(缓存).再一次,不是打开与另一端服务器的连接,而是通过HTTP协议打开与您附近的HTTP代理服务器(可能或可能在您的LAN上)的连接,并要求它代表您进行操作与终端设备的HTTP事务.

这些是枚举值描述的3种情况.

实际上,存在第四种情况 - 透明代理的情况,但顾名思义你的代码不知道它,因此它不是由枚举值表示的.在这种情况下,您根据方案1(方向连接)执行操作,但实际上您处于方案3(HTTP代理)中.从目标服务器到HTTP代理的重定向通过LAN上的网络设备(通常是路由器,有时是交换机)透明地进行.