java写一个代理服务器
时间: 2023-12-20 21:07:25 浏览: 29
好的,以下是一个简单的Java代理服务器的代码示例:
```java
import java.net.*;
import java.io.*;
public class ProxyServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
boolean listening = true;
try {
// 创建ServerSocket并绑定到本地端口
serverSocket = new ServerSocket(8080);
} catch (IOException e) {
System.err.println("Could not start server on port 8080.");
System.exit(-1);
}
while (listening) {
// 等待客户端连接
Socket clientSocket = serverSocket.accept();
// 创建代理线程处理客户端请求
Thread thread = new ProxyThread(clientSocket);
// 启动代理线程
thread.start();
}
serverSocket.close();
}
}
class ProxyThread extends Thread {
private Socket clientSocket;
public ProxyThread(Socket clientSocket) {
this.clientSocket = clientSocket;
}
public void run() {
try {
// 获取客户端输入流和输出流
InputStream clientIn = clientSocket.getInputStream();
OutputStream clientOut = clientSocket.getOutputStream();
// 解析客户端请求
String request = "";
byte[] buffer = new byte[4096];
int len = clientIn.read(buffer);
request += new String(buffer, 0, len);
// 解析请求行,获取请求方法和URL
String[] lines = request.split("\r\n");
String[] requestLine = lines[0].split(" ");
String method = requestLine[0];
String url = requestLine[1];
// 打印请求信息
System.out.println("Request method: " + method);
System.out.println("Request URL: " + url);
// 创建代理服务器Socket并连接到目标服务器
URL targetUrl = new URL(url);
Socket proxySocket = new Socket(targetUrl.getHost(), targetUrl.getPort());
InputStream proxyIn = proxySocket.getInputStream();
OutputStream proxyOut = proxySocket.getOutputStream();
// 将客户端请求发送给目标服务器
proxyOut.write(buffer, 0, len);
// 转发目标服务器响应给客户端
len = proxyIn.read(buffer);
clientOut.write(buffer, 0, len);
// 关闭连接
proxySocket.close();
clientSocket.close();
} catch (IOException e) {
System.err.println("Error handling client request: " + e.getMessage());
}
}
}
```
以上代码实现了一个简单的代理服务器,监听本地的8080端口,接收客户端的请求,解析请求后连接到目标服务器,并将目标服务器的响应转发给客户端。客户端可以通过设置代理服务器地址为localhost:8080来使用该代理服务器。需要注意的是,这个代理服务器只实现了最基本的功能,实际应用中可能需要更加完善的功能和安全性措施。