最近老师给的项目刚做完,闲着无聊就想着编点东西。实验室中通过代理上网的,所以我就试着编写了网络代理小工具。代码如下:
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();
}
}
}
}
}
测试过,性能还可以。代码就不解释了。
分享到:
相关推荐
在IT行业中,构建一个HTTP代理服务器是常见的需求,特别是在网络测试、数据抓取或隐私保护等领域。本主题将深入探讨如何使用Java语言来编写这样的代理服务器。以下是对这个主题的详细解析: 首先,理解HTTP代理...
总的来说,Java编写的HTTP代理是一个涉及网络编程、HTTP协议理解、多线程和可能的加密技术的复杂项目。通过这样的代理,用户能够实现对网络访问的控制和优化,同时也为开发者提供了一个学习和实践网络编程的好机会。
用Java写的一个小工具,通过HTML解析技术,从http://www.cnproxy.com读取代理服务器列表,并采用多线程通过代理服务器连接指定网站,测试该服务器是否可用,将可以使用的代理服务器列出以供使用。这个小工具使用了...
这是一个小工具,从网上下载后,经过改进,然后上传的。 主要用于调试TCP网络编程,例如你写了个TCP的服务器和客户端,二者之间工作得好好的,但是你想知道在底层,双方传输了哪些数据,格式是什么,那么这个工具...
标题中的“基于Java开发的一款基于Netty的内网穿透工具”揭示了我们正在讨论的是一个使用Java编程语言,并且依赖于Netty框架的软件应用。Netty是一个高性能、异步事件驱动的网络应用程序框架,常用于开发服务器和...
ServerSocket用于监听客户端的连接请求,当接收到请求时,会创建一个新的Socket连接到目标服务器。Socket则用于客户端和服务器之间的双向数据传输。理解TCP/IP协议的基础知识是必不可少的,因为代理服务器需要处理...
MyEclipse是Eclipse的一个扩展,是一款强大的Java集成开发环境,特别适合于进行Java Web应用程序的开发。在MyEclipse中,有一个内置的功能,可以将WSDL文件转换为Java代码,这个过程通常被称为“代码生成”或“代码...
在Java编程中,获取IP地址是...总之,`IpUtils`是一个方便的Java工具类,它简化了IP地址的处理,使得开发者可以更专注于业务逻辑而不是网络底层的细节。通过深入学习和使用这个类,可以提高我们处理IP相关问题的效率。
4. **JavaScript引擎**:为了执行网页中的JavaScript代码,Java浏览器需要一个JavaScript引擎。Java可以使用如Rhino(基于Mozilla的JavaScript引擎)或Nashorn(Java 8及更高版本内置的JavaScript引擎)来解析和执行...
Java 实现的代理程序是一种网络通信工具,它允许客户端通过代理服务器访问其他网络资源,以提高安全性、匿名性或优化网络性能。在这个源码中,代理程序支持多种协议,包括Socket、FTP(主动模式)以及可能的Telnet...
总的来说,Java爬虫结合Jsoup实现动态IP代理是一个涉及网络通信、HTML解析、数据处理和代理机制等多个方面的综合性问题。理解并掌握这些知识点,不仅可以提升爬虫的实用性,还有助于提高对Web技术和网络编程的理解。
"Java的HTTP代理服务器 Smart Cache" 是一个基于Java开发的网络工具,主要用于处理HTTP网络请求,同时具备缓存功能,可以提升数据访问速度并减轻服务器压力。它利用了Java的多线程和网络编程能力,实现了对HTTP协议...
综上所述,Java开发的邮件代理服务器是一个集成了多种Java技术的复杂系统,它涉及网络编程、数据库操作、邮件协议处理、安全加密、并发控制等多个领域,体现了Java作为企业级开发语言的强大能力。开发者在构建这样的...
以上就是关于"SNMP Java Agent工具"的相关知识点,涵盖了SNMP的基本概念、Java实现、MIB管理、调试方法以及一个典型的SNMP项目结构。通过理解和应用这些知识,开发者可以创建高效且可靠的网络管理解决方案。
总的来说,《基于Java多线程的HTTP代理服务器的研究与实现》这篇文档会详细阐述如何利用Java的多线程、网络编程和并发特性来构建一个功能完善的HTTP代理服务器,包括设计思路、核心技术、实现细节和最佳实践。...
在开发Web服务时,假设有一个WSDL文件描述了一个计算平方根的服务。使用WSDL2Java,我们可以轻松生成Java客户端代码,通过调用生成的存根类,实现与服务的交互。同样,对于服务提供者,也可以利用生成的服务端骨架...
反射是Java语言的一个强大工具,它允许程序在运行时检查类、接口、字段和方法的信息,并能够动态地创建对象和调用方法。通过`Class`类、`Field`类、`Method`类以及`Constructor`类,我们可以获取类的信息并进行操作...
Java 实现的代理服务器是一种网络通信工具,它允许客户端通过该服务器作为中介与目标服务器进行交互,从而隐藏了客户端的真实身份或提供了额外的安全性。在本项目中,我们主要关注的是实现了 SOCKS4 和 SOCKS5 协议...
延迟则是衡量代理IP性能的另一个关键参数。延迟是指数据从发送到接收所需的时间,通常以毫秒为单位。低延迟意味着数据传输速度快,对于需要快速响应的网络应用,如实时交易或在线游戏,尤其重要。代理IP检测工具会...