具体思路:生成2个socketServer、socketClient,分别伪装成 http服务器,和浏览器 socketClient去连http服务器(如:百度),
真正的浏览器里写入//127.0.0.1:10000,然后就连接到socketServer,
socketServer就把所有的数据(请求)都转给socketClient,socketClient去跟真正的http服务器通信
socketClient获得的数据在转发给socketServer;
等于所有的数据都在我的程序里过了下,充当已个传话筒的功能(然后我就可以对进过的数据动手脚了) 请问可以实现吗? 我写了个程序,可以转发自己写的一简单Socket C/S模式的聊天室之间的字符串数据,但是把他用到网页上就不行了
以下是代码,创建2个线分别负责转发客户端->服务器、服务器->客户端的数据,请高人指点!!!
import java.io.*;
import java.net.*; public class TransPacket
{
private static final int SERVER_PORT = 10000;
private static final int HTTP_PORT = 80;
private static final String HTTP_IP = "119.75.217.56"; //我这边百度解析出来的地址
//private static final String HTTP_IP = "127.0.0.1";
private ServerSocket ss;
private Socket socketConnectClient;
private Socket socketConnectServer; public TransPacket()
{
try
{
ss = new ServerSocket(SERVER_PORT);
socketConnectClient = ss.accept();
socketConnectServer = new Socket(HTTP_IP,HTTP_PORT);
if (socketConnectServer.isConnected())
System.out.println("connect server!");
else
System.out.println("connect false!");
Thread t1 = new send2client_Thread(socketConnectServer,socketConnectClient);
Thread t2 = new send2server_Thread(socketConnectClient,socketConnectServer);
while(true)
{
if (t1.isInterrupted() || t2.isInterrupted())
break;
}
}
catch (IOException e)
{}
}
public static void main(String[] args) throws IOException
{
new TransPacket();
} }import java.net.*;
import java.io.*;public class send2client_Thread extends Thread { Socket server;
Socket client; public send2client_Thread(Socket ss,Socket sc)
{
server = ss;
client = sc;
start();
} public void run()
{
while(true)
{
try{
byte[] byteArray = new byte[16];
server.getInputStream().read(byteArray);
PrintStream out = new PrintStream(client.getOutputStream(),true); if (byteArray != null)
{
System.out.println("server to client:" + toHex(byteArray));
//System.out.println(byteArray.toString());
out.write(byteArray);
}
//读取server的输出流
//修改输出流
//写入client的输入流
//发送client
}catch (IOException e)
{
System.out.println("err:"+e);
}
}
}
public String toHex(byte[] buf)
{
String s = "";
for(int i = 0; i < buf.length; i++)
{
int n = buf[i] >= 0 ? buf[i] : 256 + buf[i];
String str = Integer.toHexString(n);
if (str.length() < 2)
str = "0"+str;
s = s + str.toUpperCase() + " ";
}
return s;
}
}
import java.net.*;
import java.io.*;public class send2server_Thread extends Thread { Socket server;
Socket client;
public send2server_Thread(Socket sc,Socket ss)
{
client = sc;
server = ss;
start();
} public void run()
{
while(true)
{
try
{
byte[] byteArray = new byte[16];
client.getInputStream().read(byteArray);
PrintStream out = new PrintStream(server.getOutputStream(),true); if (byteArray != null)
{
System.out.println("client to server:" + toHex(byteArray));
//System.out.println(byteArray.toString());
out.write(byteArray);
}
//读取cliet的输出流
//修改输出流
//写入server的输入流
//发送server
}
catch(IOException e)
{
System.out.println("err:"+e);
}
}
}
public String toHex(byte[] buf)
{
String s = "";
for(int i = 0; i < buf.length; i++)
{
int n = buf[i] >= 0 ? buf[i] : 256 + buf[i];
String str = Integer.toHexString(n);
if (str.length() < 2)
str = "0"+str;
s = s + str.toUpperCase() + " ";
}
return s;
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货