最近老师给的项目刚做完,闲着无聊就想着编点东西。实验室中通过代理上网的,所以我就试着编写了网络代理小工具。代码如下:
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();
}
}
}
}
}
测试过,性能还可以。代码就不解释了。