1.设置java环境
2.编译下面的类
3.运行.class 文件 在dos 中运行
4.在其它局域网想上网的电脑IE设置
Internet Explorer--->属性-->连接--->局域网设置-->运行代理(能上网的电脑)IP 加端口号;
实现类一(方法一).
import java.net.*;
import java.io.*;
public class HttpProxy extends Thread {
static public int CONNECT_RETRIES=5;
static public int CONNECT_PAUSE=5;
static public int TIMEOUT=50;
static public int BUFSIZ=1024;
static public boolean logging = false;
static public OutputStream log=null;
// 传入数据用的Socket
protected Socket socket;
// 上级代理服务器,可选
static private String parent=null;
static private int parentPort=-1;
static public void setParentProxy(String name, int pport) {
parent=name;
parentPort=pport;
}
// 在给定Socket上创建一个代理线程。
public HttpProxy(Socket s) { socket=s; start(); }
public void writeLog(int c, boolean browser) throws IOException {
//log.write(c);
}
public void writeLog(byte[] bytes,int offset, int len, boolean browser) throws IOException {
//for (int i=0;i<len;i++) writeLog((int)bytes[offset+i],browser);
}
// 默认情况下,日志信息输出到
// 标准输出设备
// 派生类可以覆盖它
public String processHostName(String url, String host, int port, Socket sock) {
java.text.DateFormat cal=java.text.DateFormat.getDateTimeInstance();
//System.out.println(cal.format(new java.util.Date()) + " - " + url + " "
// + sock.getInetAddress()+"/n");
return host;
}
// 执行操作的线程
public void run() {
String line;
String host;
int port=80;
Socket outbound=null;
try {
socket.setSoTimeout(TIMEOUT);
InputStream is=socket.getInputStream();
OutputStream os=null;
try {
// 获取请求行的内容
line="";
host="";
int state=0;
boolean space;
while (true) {
int c=is.read();
if (c==-1) break;
if (logging) writeLog(c,true);
space=Character.isWhitespace((char)c);
switch (state) {
case 0:
if (space) continue;
state=1;
case 1:
if (space) {
state=2;
continue;
}
line=line+(char)c;
break;
case 2:
if (space) continue; // 跳过多个空白字符
state=3;
case 3:
if (space) {
state=4;
// 只取出主机名称部分
String host0=host;
int n;
n=host.indexOf("//");
if (n!=-1) host=host.substring(n+2);
n=host.indexOf('/');
if (n!=-1) host=host.substring(0,n);
// 分析可能存在的端口号
n=host.indexOf(":");
if (n!=-1) {
port=Integer.parseInt(host.substring(n+1));
host=host.substring(0,n);
}
host=processHostName(host0,host,port,socket);
if (parent!=null) {
host=parent;
port=parentPort;
}
int retry=CONNECT_RETRIES;
while (retry--!=0) {
try {
outbound=new Socket(host,port);
break;
} catch (Exception e) { }
// 等待
Thread.sleep(CONNECT_PAUSE);
}
if (outbound==null) break;
outbound.setSoTimeout(TIMEOUT);
os=outbound.getOutputStream();
os.write(line.getBytes());
os.write(' ');
os.write(host0.getBytes());
os.write(' ');
pipe(is,outbound.getInputStream(),os,socket.getOutputStream());
break;
}
host=host+(char)c;
break;
}
}
}
catch (IOException e) { }
} catch (Exception e) { }
finally {
try { socket.close();} catch (Exception e1) {}
try { outbound.close();} catch (Exception e2) {}
}
}
void pipe(InputStream is0, InputStream is1,
OutputStream os0, OutputStream os1) throws IOException {
try {
int ir;
byte bytes[]=new byte[BUFSIZ];
while (true) {
try {
if ((ir=is0.read(bytes))>0) {
os0.write(bytes,0,ir);
if (logging) writeLog(bytes,0,ir,true);
}
else if (ir<0)
break;
} catch (InterruptedIOException e) { }
try {
if ((ir=is1.read(bytes))>0) {
os1.write(bytes,0,ir);
if (logging) writeLog(bytes,0,ir,false);
}
else if (ir<0)
break;
} catch (InterruptedIOException e) { }
}
} catch (Exception e0) {
// System.out.println("Pipe异常: " + e0);
}
}
static public void startProxy(int port,Class clobj) {
ServerSocket ssock;
Socket sock;
try {
ssock=new ServerSocket(port);
while (true) {
Class [] sarg = new Class[1];
Object [] arg= new Object[1];
sarg[0]=Socket.class;
try {
java.lang.reflect.Constructor cons = clobj.getDeclaredConstructor(sarg);
arg[0]=ssock.accept();
cons.newInstance(arg); // 创建HttpProxy或其派生类的实例
} catch (Exception e) {
Socket esock = (Socket)arg[0];
try { esock.close(); } catch (Exception ec) {}
}
}
} catch (IOException e) {
}
}
// 测试用的简单main方法
static public void main(String args[]) {
System.out.println("在端口808启动代理服务器/n");
HttpProxy.log=System.out;
HttpProxy.logging=false;
HttpProxy.startProxy(808,HttpProxy.class);
}
}
分享到:
相关推荐
实现局域网内桌面共享功能!!!!就是在线程优化方面还有欠缺。
JAVA实现局域网跨平台实时视频传输JAVA实现局域网跨平台实时视频传输
基于Java实现语音通话,可实现 1对1通话(明确对方IP地址)或者群通话(不需要知道对方IP地址),希望能帮到更多小伙伴,直接运行main方法就可以,总共三个文件,有问题留言交流。
提供java实现局域网传文件的思路
2.1.1 2.1.2 2.1.3 2.2.1 2.2.2
java读取局域网共享机器文件 java读取局域网共享机器文件
本java工程实现了局域网聊天功能并且支持传输文件可显示传输进度,jar包齐全可导入eclipse快速进行二次开发和学习
基于JAVA基于局域网的聊天室系统设计与实现.zip基于JAVA基于局域网的聊天室系统设计与实现.zip基于JAVA基于局域网的聊天室系统设计与实现.zip基于JAVA基于局域网的聊天室系统设计与实现.zip基于JAVA基于局域网的聊天...
一个很好的实现QQ功能的局域网聊天系统,服务器与客户端分工明确,具有很好的学习开发模式,适合初学者(本人自己也是),同时加入MySql数据库,实现了基本用户注册,添加好友,显示好友列表,好友上线下线自动刷新...
使用java获取所在局域网的所有在用ip,可以检测目前有哪些ip在使用
java 读取局域网机器上共享文件,以经过测试。
java 局域网监控代码实现 实现网络拦截
更改数据库user表里面用户的IP地址,改成你所在局域网存在的有效IP地址。(不能随意填,不能相同); 启动服务器:com.chat.frame 包里面的 ServerFrame.java 右击Run as 即可。 启动客户端:com.chat.frame 包...
java多线程局域网聊天,服务器+客户端,可实现局域网内多个客户端之间的通信
(Java毕业设计)JAVA基于局域网的聊天室系统(Java毕业设计)JAVA基于局域网的聊天室系统(Java毕业设计)JAVA基于局域网的聊天室系统(Java毕业设计)JAVA基于局域网的聊天室系统(Java毕业设计)JAVA基于局域网的聊天室系统...
本人用纯JAVA所局域网QQ。特别适合交作业。应有功能都有。只要输入对方IP地址。即可以使用。
基于JAVA的局域网飞鸽传书软件设计与实现(源代码+LW)基于JAVA的局域网飞鸽传书软件设计与实现(源代码+LW).基于JAVA的局域网飞鸽传书软件设计与实现(源代码+LW).基于JAVA的局域网飞鸽传书软件设计与实现(源代码+LW)....
java毕业设计——java基于局域网的聊天室系统的设计与实现(源代码+论文).zip java毕业设计——java基于局域网的聊天室系统的设计与实现(源代码+论文).zip java毕业设计——java基于局域网的聊天室系统的设计与实现...
java写局域网通讯工具(只需jdk1.7即可运行!),主要使用socket编程编写,完美实现局域网内信息通讯,可限制聊天人数和端口号设置!
JAVA局域网飞鸽传书软件设计与实现(源代码+论文) new JAVA局域网飞鸽传书软件设计与实现(源代码+论文) new JAVA局域网飞鸽传书软件设计与实现(源代码+论文) new JAVA局域网飞鸽传书软件设计与实现(源代码+论文) new ...