Java/Network Protocol/Proxy Server

Материал из Java эксперт
Перейти к: навигация, поиск

A simple proxy server

   <source lang="java">

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) {
       }
     }
   }
 }

}


 </source>
   
  
 
  



Install Proxy Selector

   <source lang="java">

import java.io.IOException; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.ProxySelector; import java.net.SocketAddress; import java.net.URI; import java.util.ArrayList; import java.util.List; public class Utils {

 private static void installProxySelector(final String hostName, final int portNum) {
   ProxySelector.setDefault(new ProxySelector() {
     public List select(URI uri) {
       List list = new ArrayList();
       list.add(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(hostName, portNum)));
       return list;
     }
     public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
     }
   });
 }

}

 </source>