WEB开发网
开发学院WEB开发Jsp 一个简单的代理服务器 阅读

一个简单的代理服务器

 2008-01-05 08:58:26 来源:WEB开发网   
核心提示:import java.io.*;import java.net.*;public class SimplePRoxyServer {public static void main(String[] args) throws IOException {try {String host = "your Prox
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) {
    }
   }
  }
 }
}

Tags:一个 简单 代理

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接