Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中,如何在没有servlet的情况下使用代理重定向网页?_Java_Sockets_Http_Networking_Proxy - Fatal编程技术网

在java中,如何在没有servlet的情况下使用代理重定向网页?

在java中,如何在没有servlet的情况下使用代理重定向网页?,java,sockets,http,networking,proxy,Java,Sockets,Http,Networking,Proxy,我的项目是创建代理缓存并重定向我请求的网页。例如,如果我键入并请求stackoverflow.com,代理应该将我重定向到youtube.com。我已经为此编写了一些代码行,但它们似乎不起作用。对不起,我以前从未使用过代理。该项目是java的,它有三个类:httprequest和httpresponse,它们是正确的和proxycache,这是应该进行更改的类。它必须在没有servlet的情况下完成。提前感谢您!以下是我目前的代码: import java.net.*; import java.

我的项目是创建代理缓存并重定向我请求的网页。例如,如果我键入并请求stackoverflow.com,代理应该将我重定向到youtube.com。我已经为此编写了一些代码行,但它们似乎不起作用。对不起,我以前从未使用过代理。该项目是java的,它有三个类:httprequest和httpresponse,它们是正确的和proxycache,这是应该进行更改的类。它必须在没有servlet的情况下完成。提前感谢您!以下是我目前的代码:

import java.net.*;
import java.io.*;
import java.util.*;
public class ProxyCache {
    /** Port for the proxy */
    private static int port;
    /** Socket for client connections */
    private static ServerSocket socket;

    /** Create the ProxyCache object and the socket */
    public static void init(int p) {
    port = p;
    try {
        socket = new ServerSocket(port);
    } catch (IOException e) {
        System.out.println("Error creating socket: " + e);
        System.exit(-1);
    }
    }

    public static void handle(Socket client) {
    Socket server = null;
    HttpRequest request = null;
    HttpResponse response = null;

    /* Process request. If there are any exceptions, then simply
     * return and end this thread. This unfortunately means the
     * client will hang for a while, until it timeouts. */

    /* Read request */
    try {
        BufferedReader fromClient = 
        new BufferedReader(new InputStreamReader(client.getInputStream()));
        System.out.println("Reading request...");

        request = new HttpRequest(fromClient);
        System.out.println("Got request...");
    } catch (IOException e) {
        System.out.println("Error reading request from client: " + e);
        return;
    }
    /* Send request to server */
    try {
        /* Open socket and write request to socket */
            // NQS ESHTE PAGJATURE
            //if(request.getHost().include("www.stackoverflow.com")){
            //  server=new Socket=("www.plagiarism.com", 80);
            //    NQS ESHTE TIME WASTE
             //}else if(request.getHost().include("www.facebook.com")){
             //  server=new Socket("ajo e yt", 80);
            //}else{
                server = new Socket(request.getHost(), request.getPort());
      //} 

            DataOutputStream toServer = 
        new DataOutputStream(server.getOutputStream());
        toServer.writeBytes(request.toString());
    } catch (UnknownHostException e){
        System.out.println("Unknown host: " + request.getHost());
        System.out.println(e);
        return;
    } catch (IOException e) {
        System.out.println("Error writing request to server: " + e);
        return;
    }
    /* Read response and forward it to client */
    try {
        DataInputStream fromServer = 
        new DataInputStream(server.getInputStream());
        //InputStream is = server.getInputStream();

        response = new HttpResponse(fromServer);
        //response = new HttpResponse(is);
        DataOutputStream toClient =
            new DataOutputStream(client.getOutputStream());
        toClient.writeBytes(response.toString());
        toClient.write(response.body);
        client.close();
        server.close();
        /* Insert object into the cache */
        /* Fill in (optional exercise only) */
    } catch (IOException e) {
        System.out.println("Error writing response to client: " + e);
    }
    }


    /** Read command line arguments and start proxy */
    public static void main(String args[]) {
    int myPort = 0;

    try {
        myPort = Integer.parseInt(args[0]);
    } catch (ArrayIndexOutOfBoundsException e) {
        System.out.println("Need port number as argument");
        System.exit(-1);
    } catch (NumberFormatException e) {
        System.out.println("Please give port number as integer.");
        System.exit(-1);
    }

    init(myPort);

    /** Main loop. Listen for incoming connections and spawn a new
     * thread for handling them */
    Socket client = null;

    while (true) {
        try {
        client = socket.accept();
        System.out.println("Got connection " + client);
        handle(client);
        //ProxyCacheThread request = new ProxyCacheThread(client);
        //request.run();
        } catch (IOException e) {
        System.out.println("Error reading request from client: " + e);
        /* Definitely cannot continue, so skip to next
         * iteration of while loop. */
        continue;
        }
    }

    }
} 

由于所有代码都集中在一个类中,您肯定会很快感到头痛,我建议您将代码拆分为
ListingServer、ClientSource、ClientTarget
如果所有代码都集中在一个类中,您肯定会很快感到头痛,我建议您将代码拆分为
ListingServer、ClientSource、ClientTarget