Socket编程--自己动手的HTTP代理服务器
来源:互联网 发布:淘宝网涵元服饰 编辑:程序博客网 时间:2024/06/02 07:48
浏览器使用代理:Firefox浏览器:
选项->高级->连接->设置,选择手动配置代理。
实现http代理:
1.等待来自一个客户端的连接;
2.启动一个新线程来处理连接;
InputStream cis = null,sis=null;
OutputStream cos = null,sos=null;
try{
csocket.setSoTimeout(TIMEOUT);
cis=csocket.getInputStream();
cos=csocket.getOutputStream();
}
上面的代码定义了代理服务器与目标服务器间套接字并初试化,其中cis为客户端输入流,sis为目标主机输入流,socket为套接字。同时设置了超时控制,如果某个Socket不可用,另一个仍旧有机会进行处理,不必创建一个新的线程。
我的类直接从Thread类继承了下来.并且通过构造函数传递引用和客户Socket建立了联系.这样每个线程就有了一个通讯管道(pipe)。同样重写run方法,把代理工作交给线程来完成。这样多客户并行的Socket就建立起来了
3.读浏览器请求的第一行(包含终点url的行);
4.解析请求第一行中终点Http服务器名及其端口号;
URL=getRequestURL(buffer);
int n;
n=URL.indexOf(“//”);
if (n!=-1)
host=URL.substring(n+2); // www.baidu.com/
n=host.indexOf(‘/’);
if (n!=-1)
host=host.substring(0,n);// www.baidu.com
// 分析可能存在的端口号
n=host.indexOf(‘:’);
if (n!=-1) {
port=Integer.parseInt(host.substring(n+1));
host=host.substring(0,n);
}
5.打开一个到终点Http服务器的套接字;
while (retry–!=0) {
try {
//与目标服务器建立连接
ssocket=new Socket(host,port); //尝试建立与目标主机的连接
break;
} catch (Exception e) { }
Thread.sleep(CONNECT_PAUSE);//线程等待几毫秒
}
6.通过该套接字发送/Http请求;
if(ssocket!=null){
ssocket.setSoTimeout(TIMEOUT);//设置套接字超时时间
sis=ssocket.getInputStream();
sos=ssocket.getOutputStream();//从sscoket中得到输出流
sos.write(buffer.getBytes()); //将请求头写入,向目标服务器输出http命令
7.发送从终点Http服务器(通过套接字)返回给浏览器请求的数据;
pipe(cis,sis,sos,cos); 这个方法用来实现套接字之间的数据交换。
8.关闭套接字,等待下一次连接。
由于关闭套接字时会抛异常,所以我用try,catch来包围代码块。
Socket 编程的客户端和服务器端主要步骤
1.编写服务器端,实例化ServerSocket对象,这里要定义ip和端口,实例化Socket,从ServerSocket对象中accept() 获取,这里要涉及到流,输入输出流在Socket中获取。
2.编写客户端,实例化Socket对象,ip,端口,流,在Socket中获取:
1.创建服务器端SocketServer,并定义SocketServer的监听端口;
2、ServerSocket调用accept( )方法,是指处于阻塞;
3、创建客户端的Socket,并设置服务器的IP和端口;
4、客户端发送连接请求,建立连接;
5、分别取得服务器和客户端Socket的InputStream和OutputStream;
6、利用Socket和ServerSocket进行数据传输
HTTP 代理服务器的基本原理:
HTTP 客户端向代理发送请求报文,代理服务器需要正确地处理请求和连接(例如正确处理 Connection: keep-alive),同时向服务器发送请求,并将收到的响应转发给客户端。
HTTP 代理服务器的程序流程图
实现 HTTP 代理服务器的关键技术及解决方案:
理解Socket编程技术,分析HTTP代理应用程序设计原理和程序流程,选择合适的开发环境,参考已有的HTTP程序功能,设计实现HTTP代理功能的应用程序。
解决方案:Java实现socket编程并实现多线程。
- Socket编程--自己动手的HTTP代理服务器
- 用socket实现自己的HTTP代理服务器
- 自己动手寻找代理服务器的方法
- 原生socket穿透HTTP代理服务器
- HTTP代理服务器的实现
- JAVA写HTTP代理服务器(一)-socket实现
- 自己动手利用Socket 实现HTTP与HTTPS
- http编程、socket编程
- java写的http代理服务器
- 打造自己的HTTP代理服务器
- 打造自己的HTTP代理服务器
- 浅谈http代理服务器的穿透
- HTTP代理服务器的工作原理
- 简单的HTTP代理服务器实现
- 搭建自己的http代理服务器
- go 写的http代理服务器
- 搭建自己的http代理服务器
- HTTP代理服务器的工作原理
- iOS 8开发入门--序言(2)
- Android适配—百分比布局库(android-percent-support-lib-sample)
- 史上最简单的 MyBatis 教程(二)
- ubuntu下使用qemu模拟ARM(六)------驱动程序编译进内核方法
- PHP基础知识-函数
- Socket编程--自己动手的HTTP代理服务器
- PART IV 程序设计层 Chapter 7 低级程序设计语言
- 1008. 数组元素循环右移问题 (20)
- spingIoc利用工厂调用方法创建对象
- ZooKeeper客户端常用命令
- 数据库中时间存储类型相关
- fstream头文件
- MySQL 字段添加 删除
- ASPX操作数据库