一个简单的代理服务器

王朝other·作者佚名  2008-05-31
宽屏版  字体: |||超大  

import Java.io.*;

import java.net.*;

public class SimpleProxyServer {

public static void main(String[] args) throws IOException {

try {

String host = "your Proxy Server";

int remoteport = 100;

int localport = 111;

// Print a start-up message

System.out.println("Starting proxy for " + host + ":" + remoteport

+ " on port " + localport);

// And start running the server

runServer(host, remoteport, localport); // never returns

} catch (Exception e) {

System.err.println(e);

}

}

/**

* runs a single-threaded proxy server on

* the specified local port. It never returns.

*/

public static void runServer(String host, int remoteport, int localport)

throws IOException {

// Create a ServerSocket to listen for connections with

ServerSocket ss = new ServerSocket(localport);

final byte[] request = new byte[1024];

byte[] reply = new byte[4096];

while (true) {

Socket client = null, server = null;

try {

// Wait for a connection on the local port

client = ss.accept();

final InputStream streamFromClient = client.getInputStream();

final OutputStream streamToClient = client.getOutputStream();

// Make a connection to the real server.

// If we cannot connect to the server, send an error to the

// client, disconnect, and continue waiting for connections.

try {

server = new Socket(host, remoteport);

} catch (IOException e) {

PrintWriter out = new PrintWriter(streamToClient);

out.print("Proxy server cannot connect to " + host + ":"

+ remoteport + ":\n" + e + "\n");

out.flush();

client.close();

continue;

}

// Get server streams.

final InputStream streamFromServer = server.getInputStream();

final OutputStream streamToServer = server.getOutputStream();

// a thread to read the client's requests and pass them

// to the server. A separate thread for asynchronous.

Thread t = new Thread() {

public void run() {

int bytesRead;

try {

while ((bytesRead = streamFromClient.read(request)) != -1) {

streamToServer.write(request, 0, bytesRead);

streamToServer.flush();

}

} catch (IOException e) {

}

// the client closed the connection to us, so close our

// connection to the server.

try {

streamToServer.close();

} catch (IOException e) {

}

}

};

// Start the client-to-server request thread running

t.start();

// Read the server's responses

// and pass them back to the client.

int bytesRead;

try {

while ((bytesRead = streamFromServer.read(reply)) != -1) {

streamToClient.write(reply, 0, bytesRead);

streamToClient.flush();

}

} catch (IOException e) {

}

// The server closed its connection to us, so we close our

// connection to our client.

streamToClient.close();

} catch (IOException e) {

System.err.println(e);

} finally {

try {

if (server != null)

server.close();

if (client != null)

client.close();

} catch (IOException e) {

}

}

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有