0

こんにちは、みんな!!!!!!!!!!私のプロキシ/サーバーは、次の形式でクライアントからリクエストを受け取ります。

GET mhttp://proxy_ip:proxy_port/file.mhtml\n
\n

ここに私のコードがあります:

import java.io.*;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class ProxyMain {

public static void main(String argv[]) {

    int proxyPort = 55554;
    String proxyAddr = "127.0.0.1";
    ServerSocket proxySocket = null;

    try {
        proxySocket = new ServerSocket(proxyPort, 50,  InetAddress.getByName("127.0.0.1"));
    }

    catch (Exception e) {
        System.err.println("Impossible to create socket server!");
        System.out.flush();
        System.exit(1);
    }

    System.out.printf("Server active on port: %d and on address %s\n", proxyPort, proxySocket.getInetAddress());

    while (true) {
        Socket client = null;
        BufferedReader in = null;
        PrintWriter out = null;
        String request = new String();
        String tmp = new String();


        try {
            client = proxySocket.accept();
            System.out.println("Connected to: ");
            System.out.println(client.getInetAddress().toString());
            System.out.printf("On port %d\n", client.getPort());
            in = new BufferedReader(new InputStreamReader(client.getInputStream()));
            out = new PrintWriter(client.getOutputStream(), true);

        }

        /*catch (IOException e) {
            System.err.println("Couldn't get I/O for connection accepted");
            System.exit(1);
        }*/

        catch (Exception e) {
            System.out.println("Error occurred!");
            System.exit(1);
        }

        System.out.println("Received request:");

        try{
            #####################################
                            while ((tmp = in.readLine()) != null)
            System.out.println(tmp);
            request = request + tmp;
                            #####################################
        }
        catch (IOException ioe) {
            System.err.println("Impossible to read mhttp request!");
            System.exit(1);
        }

        System.out.println(request);
    }

}

}

######### で区切られたブロックに問題があります。メソッド in.readLine() を停止する方法がわかりません。最初に読み取ります: GET mhttp://proxy_ip:proxy_port/file.mhtml\n 次に読み取り \n を読み取りますが、ブロックし、まだ読み取りを待機していますが、要求は終了しています。リクエストを送信した後でも、クライアントは接続を維持していると思いますが、先生のソフトウェアであるため、これを変更することはできません。どうすればこれを解決できますか?

4

1 に答える 1

1

'\n'グレッグが示唆するように、行全体を読み取らないでください。またはに遭遇するまで1バイトを読み取るか、2つの読み取り行を実行してください。いずれにせよ、着信メッセージの正確な形式がわかっているので、それに応じて読み取るようにコードを調整してください。

于 2013-02-25T13:59:32.097 に答える