从JDK15开始,Java在javanet包下提供了Proxy和ProxySelector两个类,其中Proxy代表一个代理服务器,可以在打开URLConnection连接时指定所用的Proxy实例,也可以在创建Socket连接时指定Proxy实例。而ProxySelector代表一个代理选择器,它提供了对代理服务器更加灵活的控制,它可以对>
代理服务器的功能就是代理网络用户去取得网络信息。我们使用网络浏览器直接连接其他Internet站点取得网络信息时,通常需要发送Request请求来等到响应。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取得网页数据而是向代理服务器发出请求,Request请求会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并送回给网络浏览器。而且,大部分代理服务器都具有缓冲的功能,就好像一个大的Cache,它有很大的存储空间,它不断将新取得的数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。归纳起来代理服务器主要提供如下两个功能:
突破自身IP限制,对外隐藏自身IP地址。突破IP限制包括访问国外受限站点,访问国内特定单位、团体的内部资源。
提高访问速度,代理服务器提供的缓冲功能可以避免每个用户都直接访问远程主机,从而提高客户端访问速度。
1751 直接使用Proxy创建连接
Proxy有如下一个构造器:Proxy(ProxyType type, SocketAddress sa):创建表示代理服务器的Proxy对象。而sa参数指定代理服务器的地址,其中type是该代理服务器的类型,该服务器类型有如下三种:
(1)ProxyTypeDIRECT:表示直接连接或缺少代理。
(2)ProxyType>
(3)ProxyTypeSOCKS:表示 SOCKS(V4 或 V5)代理。
一旦创建了Proxy对象之后,程序就可以在使用URLConnection打开连接时,或创建Socket连接时传入一个Proxy对象,作为本次连接所使用的代理服务器。
其中URL包含了一个URLConnection openConnection(Proxy proxy)方法,该方法使用指定的代理服务器来打开连接;而Socket则提供了一个Socket(Proxy proxy)构造器,该构造器使用指定的代理服务器创建一个没有连接的Socket对象。
下面以URLConnection为例来介绍如何在URLConnection中使用代理服务器。
程序清单:codes/17/17-5/ProxyTestjava
上面代码第一行粗体字代码创建了一个Proxy对象,第二行粗体字代码就是用Proxy对象来打开URLConnection连接。除此之外,该程序的其他地方就是对URLConnection的使用了。由此可见, JDK15提供了对代理服务器很好的支持。
1752 使用ProxySelector选择代理服务器
前面介绍的直接使用Proxy对象可以在打开URLConnection或Socket时指定代理服务器,使用这种方式需要每次打开连接都显式设置代理服务器。如果想让系统打开连接时总是具有默认的代理服务器,则可以使用javanetProxySelector,它可以它根据不同的连接使用不同的代理服务器。
系统默认的ProxySelector会检测各种系统属性和URL协议,然后决定怎样连接不同的主机。当然,程序也可以调用ProxySelector类的setDefaultI()静态方法来设置默认代理服务器,也可以调用getDefault()方法获得系统当前默认的代理服务器。
程序可以通过System类来设置系统的代理服务器属性,关于代理服务器常用的属性名有如下三个:
>
>
>
下面程序示范了通过改变系统属性来改变默认的代理服务器。
程序清单:codes/17/17-5/ ProxySelectorTestjava
上面程序中三行粗体字代码设置Java打开>
运行上面程序,将会看到程序长时间等待,因为192168096通常并不是有效的代理服务器(当然,如果读者运行的机器恰好可以使用地址为192168096的代理服务器又另当别论)。
系统提供了默认的ProxySelector子类作为代理选择器,开发者可以实现自己的代理选择器,程序可以通过继承ProxySelector来实现自己的代理选择器。继承ProxySelector需要重写两个方法:
List<Proxy> select(URI uri):实现该方法让代理选择器根据不同的URI来使用不同的代理服务器,该方法就是代理选择器管理网络连接使用代理服务器的关键。
connectFailed(URI uri, SocketAddress sa, IOException ioe):当系统通过默认的代理服务器建立连接失败后,代理选择器将会自动调用该方法。通过重写该方法可以对连接代理服务器失败的情形进行处理。
系统默认的代理服务器选择器也重写了connectFailed方法,它重写该方法的处理策略是:当系统设置的代理服务器失败时,默认代理选择器将会采用直连的方式连接远程资源,所以当运行上面程序等待了足够长时间时,程序依然可以打印出该远程资源的所有内容。
玩游戏的朋友很多,最后说一下玩网络游戏的代理设置:
1。设置网络游戏的代理这就需要用软件了,现在一般使用sockscap和eBorderclient,我习惯用eBorderclient,现在以eBorderclient为例。
下载地址: >
IP代理是非透明的代理,如果一个程序不支持它就麻烦了,如游戏等就不支持它。
解决这个问题的办法是,将IP代理转换为透明的,这个工具有三种,最佳的还是
ProxifierPE291汉化版,我们已使用很久,运行它,设好代理参数,代理就透明了,
所有应用程序包括游戏,就不需要再设代理参数了,呵呵。要的请留信箱
可能现在对局域网上网用户限制比较多,比如不能上一些网站,不能玩某些游戏,不能上MSN,端口限制等等,一般就是通过代理服务器上的软件进行限制,如现在谈的最多的ISA Server 2004,或者是通过硬件防火墙进行过滤。下面谈谈如何突破限制,需要分限制情况进行说明: 一、单纯的限制某些网站,不能访问,网络游戏(比如联众)不能玩,这类限制一般是限制了欲访问的IP地址。 对于这类限制很容易突破,用普通的>
以上就是关于Java 中怎样在程序中设置代理服务器全部的内容,包括:Java 中怎样在程序中设置代理服务器、怎样在局域网内用代理服务器玩网游、应用程序设置代理服务器等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)