"
以下是一个简单的Java网络代理代码示例,它使用Java的Socket和ServerSocket类来建立代理服务器和客户端之间的连接:
代理服务器端代码:
```java
import java.io.*;
import java.net.*;
public class ProxyServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("代理服务器已启动,等待客户端连接...");
while (true) {
Socket clientSocket = serverSocket.accept();
Thread t = new Thread(new ClientHandler(clientSocket));
t.start();
}
}
}
class ClientHandler implements Runnable {
private Socket clientSocket;
public ClientHandler(Socket clientSocket) {
this.clientSocket = clientSocket;
}
@Override
public void run() {
try {
BufferedReader clientReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String request = clientReader.readLine();
if (request == null) {
clientSocket.close();
return;
}
String[] requestParts = request.split(" ");
String method = requestParts[0];
String url = requestParts[1];
URL requestedUrl = new URL(url);
String host = requestedUrl.getHost();
Socket serverSocket = new Socket(host, 80);
OutputStream serverOutput = serverSocket.getOutputStream();
serverOutput.write(request.getBytes());
serverOutput.flush();
BufferedReader serverReader = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
String response = serverReader.readLine();
if (response == null) {
serverSocket.close();
return;
}
OutputStream clientOutput = clientSocket.getOutputStream();
clientOutput.write(response.getBytes());
clientOutput.flush();
clientSocket.close();
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
代理客户端代码:
```java
import java.io.*;
import java.net.*;
public class ProxyClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 8080);
System.out.println("已连接到代理服务器");
BufferedReader clientReader = new BufferedReader(new InputStreamReader(System.in));
String request = clientReader.readLine();
OutputStream socketOutput = socket.getOutputStream();
socketOutput.write(request.getBytes());
socketOutput.flush();
BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String response = socketReader.readLine();
System.out.println("来自代理服务器的响应: " + response);
socket.close();
}
}
```
在这个示例中,代理服务器监听8080端口,等待客户端连接。当客户端连接后,代理服务器读取客户端的HTTP请求,并将其转发给目标服务器。目标服务器响应后,代理服务器将响应返回给客户端。
代理客户端连接到代理服务器,并发送HTTP请求。代理服务器收到请求后,将其转发给目标服务器。目标服务器响应后,代理服务器将响应返回给客户端。"