`
zhaole609
  • 浏览: 342686 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

java写的一个网络代理小工具

 
阅读更多

最近老师给的项目刚做完,闲着无聊就想着编点东西。实验室中通过代理上网的,所以我就试着编写了网络代理小工具。代码如下:

package com.lqz;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.lang.Runnable;
/**
 * 
 * @author feifan
 * @category javaCCproxy
 * @version 1.5.0
 * @copyrihgt private
 * 
 * 
 */
public class UsingGoAgent {
	private ServerSocket server=null;
	private Socket client=null;
	public UsingGoAgent() throws Exception {
		server=new ServerSocket(809);
		service();
	}
	public void service() throws IOException{
		while(true){
			client=server.accept();
			client.setSoTimeout(500);
			new Thread(new ProcessRequest(client)).start();
		}
	}
	/**
	 * 
	 * receive request data and send request data
	 *
	 */
	class ProcessRequest implements Runnable {
		private Socket pClient,socket;
		private InputStream is;
		private OutputStream os;
		private String host=null;
		private int port=80;
		public ProcessRequest(Socket socket){
			this.pClient=socket;
		}
		public void run(){
			try {
				is=pClient.getInputStream();
				byte[] array=new byte[1024];
				int b=is.read(array);
				int count=0;
				StringBuffer sb=new StringBuffer();
				while(b>0){
					for(int i=0;i<b;i++){
					 char c=(char)array[i];
				     if(c=='/'){
				    	 count++;
				     }
				     if(count==2&&c!='/'){
				    	 sb.append(c);
				     }
				     if(count==3){
				    	 break;
				     }
					}
					host=sb.toString();
					break;
				}
				//create new socket link for current 
				System.out.println("当前主机名为:"+host);
				socket=new Socket(host,80);
				socket.setSoTimeout(500);
				//Socket socket=new Socket("127.0.0.1",8087);
				is=pClient.getInputStream();
				os=pClient.getOutputStream();
				OutputStream currentos=socket.getOutputStream();
				InputStream currentis=socket.getInputStream();
				byte[] newarray=new byte[1024];
				int length=0;
				for(int i=0;i<array.length;i++){
					System.out.print((char)array[i]);
				}
				currentos.write(array,0,b);
				//currentos.write(' ');
				//currentos.write(host.getBytes());
				//currentos.write(' ');
				while(b!=-1){
					while((length=currentis.read(newarray))!=-1)	
					 os.write(newarray,0,length);
					 
					 b=is.read(array);
					 currentos.write(array,0,b);
					 
				}
				
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally{
				try {
					socket.close();
					pClient.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			
		}
	}
}

测试过,性能还可以。代码就不解释了。

分享到:
评论

相关推荐

    Java写http代理服务器

    在IT行业中,构建一个HTTP代理服务器是常见的需求,特别是在网络测试、数据抓取或隐私保护等领域。本主题将深入探讨如何使用Java语言来编写这样的代理服务器。以下是对这个主题的详细解析: 首先,理解HTTP代理...

    Java编写的HTTP代理

    总的来说,Java编写的HTTP代理是一个涉及网络编程、HTTP协议理解、多线程和可能的加密技术的复杂项目。通过这样的代理,用户能够实现对网络访问的控制和优化,同时也为开发者提供了一个学习和实践网络编程的好机会。

    代理服务器自动测试工具(含Java源码)

    用Java写的一个小工具,通过HTML解析技术,从http://www.cnproxy.com读取代理服务器列表,并采用多线程通过代理服务器连接指定网站,测试该服务器是否可用,将可以使用的代理服务器列出以供使用。这个小工具使用了...

    一个TCP代理程序

    这是一个小工具,从网上下载后,经过改进,然后上传的。 主要用于调试TCP网络编程,例如你写了个TCP的服务器和客户端,二者之间工作得好好的,但是你想知道在底层,双方传输了哪些数据,格式是什么,那么这个工具...

    基于Java开发的一款基于Netty的内网穿透工具,主要用于将内网服务反向代理到公网访问.zip

    标题中的“基于Java开发的一款基于Netty的内网穿透工具”揭示了我们正在讨论的是一个使用Java编程语言,并且依赖于Netty框架的软件应用。Netty是一个高性能、异步事件驱动的网络应用程序框架,常用于开发服务器和...

    Java代理服务器程序

    ServerSocket用于监听客户端的连接请求,当接收到请求时,会创建一个新的Socket连接到目标服务器。Socket则用于客户端和服务器之间的双向数据传输。理解TCP/IP协议的基础知识是必不可少的,因为代理服务器需要处理...

    把wsdl文件或地址转化成java代码工具

    MyEclipse是Eclipse的一个扩展,是一款强大的Java集成开发环境,特别适合于进行Java Web应用程序的开发。在MyEclipse中,有一个内置的功能,可以将WSDL文件转换为Java代码,这个过程通常被称为“代码生成”或“代码...

    java IP地址工具类,java IP地址获取,java获取客户端IP地址

    在Java编程中,获取IP地址是...总之,`IpUtils`是一个方便的Java工具类,它简化了IP地址的处理,使得开发者可以更专注于业务逻辑而不是网络底层的细节。通过深入学习和使用这个类,可以提高我们处理IP相关问题的效率。

    java写的网络浏览器

    4. **JavaScript引擎**:为了执行网页中的JavaScript代码,Java浏览器需要一个JavaScript引擎。Java可以使用如Rhino(基于Mozilla的JavaScript引擎)或Nashorn(Java 8及更高版本内置的JavaScript引擎)来解析和执行...

    java实现的代理程序源码

    Java 实现的代理程序是一种网络通信工具,它允许客户端通过代理服务器访问其他网络资源,以提高安全性、匿名性或优化网络性能。在这个源码中,代理程序支持多种协议,包括Socket、FTP(主动模式)以及可能的Telnet...

    Java采集最新动态代理IP

    总的来说,Java爬虫结合Jsoup实现动态IP代理是一个涉及网络通信、HTML解析、数据处理和代理机制等多个方面的综合性问题。理解并掌握这些知识点,不仅可以提升爬虫的实用性,还有助于提高对Web技术和网络编程的理解。

    Java的HTTP代理服务器 Smart Cache

    "Java的HTTP代理服务器 Smart Cache" 是一个基于Java开发的网络工具,主要用于处理HTTP网络请求,同时具备缓存功能,可以提升数据访问速度并减轻服务器压力。它利用了Java的多线程和网络编程能力,实现了对HTTP协议...

    Java开发的邮件代理服务器

    综上所述,Java开发的邮件代理服务器是一个集成了多种Java技术的复杂系统,它涉及网络编程、数据库操作、邮件协议处理、安全加密、并发控制等多个领域,体现了Java作为企业级开发语言的强大能力。开发者在构建这样的...

    snmp java agent工具

    以上就是关于"SNMP Java Agent工具"的相关知识点,涵盖了SNMP的基本概念、Java实现、MIB管理、调试方法以及一个典型的SNMP项目结构。通过理解和应用这些知识,开发者可以创建高效且可靠的网络管理解决方案。

    基于Java多线程的HTTP代理服务器的研究与实现.pdf

    总的来说,《基于Java多线程的HTTP代理服务器的研究与实现》这篇文档会详细阐述如何利用Java的多线程、网络编程和并发特性来构建一个功能完善的HTTP代理服务器,包括设计思路、核心技术、实现细节和最佳实践。...

    WSDL2Java工具

    在开发Web服务时,假设有一个WSDL文件描述了一个计算平方根的服务。使用WSDL2Java,我们可以轻松生成Java客户端代码,通过调用生成的存根类,实现与服务的交互。同样,对于服务提供者,也可以利用生成的服务端骨架...

    java语言反射与动态代理学习笔记2(动态代理部分)

    反射是Java语言的一个强大工具,它允许程序在运行时检查类、接口、字段和方法的信息,并能够动态地创建对象和调用方法。通过`Class`类、`Field`类、`Method`类以及`Constructor`类,我们可以获取类的信息并进行操作...

    基于Java实现的代理服务器

    Java 实现的代理服务器是一种网络通信工具,它允许客户端通过该服务器作为中介与目标服务器进行交互,从而隐藏了客户端的真实身份或提供了额外的安全性。在本项目中,我们主要关注的是实现了 SOCKS4 和 SOCKS5 协议...

    代理IP检测工具,HTTP/HTTPS/SOCKS5协议连通率和延迟检测

    延迟则是衡量代理IP性能的另一个关键参数。延迟是指数据从发送到接收所需的时间,通常以毫秒为单位。低延迟意味着数据传输速度快,对于需要快速响应的网络应用,如实时交易或在线游戏,尤其重要。代理IP检测工具会...

Global site tag (gtag.js) - Google Analytics