Java网络编程-代理

来源:互联网 发布:windows为什么要激活 编辑:程序博客网 时间:2024/06/07 17:38

1.网络编程简述

基于 TCP/IP 4层网络模型:物理层、网络层、传输层、应用层

纯Java只能工作在网络层以上,即只能在传输层和应用层直接编程

所以使用Java抓包,比如监听网卡都需要借助第三方工具比如 winpcap来做,不是特别方便

但正应为java工作在网络层以上,并且提供面向TCP的Socket编程

Java 帮我们封装了包分片、丢失重传、分片组装、校验等等一系列低层工作

所以才会觉得Java网络编程上手是如此简单,言归正常,来说代理

(1)传输层常用的协议就是TCP+UDP

(2)应用层是我们说的高层,常用的协议有 HTTP、FTP、SMTP、POP 等

使用Java发起网络连接,如果要使用代理,该如何使用呢


2. 网络代理

package com.yli.socket;import java.io.IOException;import java.net.InetSocketAddress;import java.net.MalformedURLException;import java.net.Proxy;import java.net.Socket;import java.net.SocketAddress;import java.net.URL;public class ProxyTest {public static void main(String[] args) {// 3种形式的代理// 1.工作于高层:即应用层的代理,比如 http 和 ftpProxy.Type type_http = Proxy.Type.HTTP;// 2.工作在低层:即传输层的代理 SOCKSProxy.Type type_socks = Proxy.Type.SOCKS;// 3.直连网络 即不通过代理// Proxy.Type type_none = Proxy.Type.DIRECT;try {// 如何设置代理,有2种方法:以下分别演示// ************************ 全局代理 *****************************//// 1.1 设置http全局代理 :同一个JVM里面的连接都默认使用该代理System.setProperty("http.proxyHost", "192.168.157.1");System.setProperty("http.proxyPort", "80");// 如果哪些连接不通过代理,可通过 http.nonProxyHosts设置System.setProperty("http.nonProxyHosts", "oa.xx.com|*.soa.com");// 1.2 设置socks全局代理:注意这种方式就是要么全部使用代理,要么全部使用// 不像 http 代理还可以设置 nonProxyHostsSystem.setProperty("socks.proxyHost", "192.168.157.1");System.setProperty("socks.proxyPort", "80");// ************************ 连接前指定代理 *****************************//// 2.1 应用层编程(比如http/ftp等)使用代理: 比如通过代理连接到百度SocketAddress sa = new InetSocketAddress("192.168.157.1", 80);Proxy http_proxy = new Proxy(type_http, sa);URL url = new URL("http://www.baidu.com");url.openConnection(http_proxy);// 2.2 直接在低层即传输层使用Socket编程,在连接前使用代理Proxy socks_proxy = new Proxy(type_socks, sa);Socket client = new Socket(socks_proxy);SocketAddress remote = new InetSocketAddress("baidu.com", 80);client.connect(remote, 3000);client.close();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

上述代码详细介绍了代理的几种形式,以及如何使用代理发起连接

当然很多情况下,通过代理连接是需要提供口令即账号密码的,这个也不难

下一篇介绍



0 0
原创粉丝点击