手写一个代理服务器 proxy server
package com.base.proxyserver; import java.io.*; import java.net.*; public class SimpleProxyServer { public static void main(String[] args) throws IOException { try { //jdbc:oracle:thin:@10.1.114.205:1753:O05GCE0 String host = "10.1.114.205";//"qdc05133-scan.it.statestr.com"; int remoteport = 1753; int localport = 1789; // 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) { System.out.println("str = " + new String(request, "utf-8")); 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); System.out.println("response = " + new String(reply, "utf-8")); 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) { } } } } }
相关推荐
windle 2020-10-29
scaleqiao 2020-10-22
superyu 2020-09-10
xcznb 2020-06-26
LandryBean 2020-06-17
furongwei 2020-06-09
clmngu 2020-06-06
windzoone 2020-05-29
huangzonggui 2020-05-28
itmale 2020-05-26
BuildingUtil 2020-05-09
leodengzx 2020-05-11
MichelinMessi 2020-04-20
huangzonggui 2020-04-16
魏莉的微 2020-04-08
zongyuewang 2020-03-30
wxthillwill 2020-03-06
sicceer 2020-02-23
SoarFly00 2020-02-03