1

私は、クライアントからの取得要求を処理するために Java ソケットを使用するプロキシ サーバーを作成することになっているこの割り当てを持っています。私は今立ち往生しており、答えを見つけるためにグーグル全体を探していますが、成功していません。

Christoffers のソリューションは、私の最初の問題を解決するのに役立ちました。コードを更新したので、これが私が使用しているものです。

問題は、クライアント ループにパケットを送り返す前に、ほとんどの Web ページの一部しかダウンロードしないことです。現時点では、なぜそれがそのように振る舞うかを説明することはできません。

public class MyProxyServer {  
    //Set the portnumber to open socket on
    public static final int portNumber = 5555;  

    public static void main(String[] args){  
//create and start the proxy
MyProxyServer myProxyServer = new MyProxyServer();  
myProxyServer.start();  
}  
public void start(){  
System.out.println("Starting MyProxyServer ...");  
try {  
    //create the socket 
    ServerSocket serverSocket = new ServerSocket(MyProxyServer.portNumber);  

    while(true)
    {    
        //wait for a client to connect
        Socket clientSocket = serverSocket.accept();  

        //create a reader to read the instream
        BufferedReader inreader = new BufferedReader( new InputStreamReader(clientSocket.getInputStream(), "ISO-8859-1"));  

        //string builder for preformance when we loop over the inputstream and read lines
        StringBuilder builder = new StringBuilder();
        String host = "";


        for (String buffer; (buffer = inreader.readLine()) != null;) {
        if (buffer.isEmpty()) break;
        builder.append(buffer.replaceAll("keep-alive", "close"));
        if(buffer.contains("Host"))
            {
            //parse the host
            host = buffer.replaceAll("Host: ", "");
            }
        System.out.println(buffer);
        }


        String req = builder.toString();
        System.out.println("finshed reading \n" + req);
        System.out.println("host: " + host);


        //new socket to send the information over
        Socket s = new Socket(InetAddress.getByName(host), 80);

        //printwriter to send text over the output stream
        PrintWriter pw = new PrintWriter(s.getOutputStream()); 

        //send the request from the client
        pw.println(req+"\r\n");
        pw.flush();

        //create inputstream to receive the web page from the host
        BufferedInputStream in = new BufferedInputStream(s.getInputStream());

        //create outputstream to send the web page to the client
        BufferedOutputStream outbuffer = new BufferedOutputStream(clientSocket.getOutputStream());

        byte[] bytebuffer = new byte[1024];
        int bytesread;

        //send the response back to the client
        while((bytesread = in.read(bytebuffer)) != -1) {
        System.out.println(bytesread);
        outbuffer.write(bytebuffer,0, bytesread);
        outbuffer.flush();
        }
        System.out.println("done sending");

        //close the streams
        inreader.close();
        s.close();
        pw.close();
        outbuffer.close();
        in.close();
    }


} catch (IOException e) {  
    e.printStackTrace();
}  catch(RuntimeException e){
    e.printStackTrace();
}
}  

}

正しく動作しない理由と解決方法を誰かが説明してくれたら、とても感謝しています!

前もって感謝します。

4

0 に答える 0