-1

プロキシ サーバーを作成しようとしています。

画像やその他すべてのものを表示できるように、ウェブサイトをバイト単位で読みたいと思っています。readLine を試しましたが、画像を表示できません。コードを変更して DataOutputStream オブジェクトを含むすべてのデータを browser に送信する方法について何か提案はありますか?

try{
    Socket s = new Socket(InetAddress.getByName(req.hostname), 80);
    String file = parcala(req.url);
    DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream());
    BufferedReader dis = new BufferedReader(new InputStreamReader(s.getInputStream()));
    PrintWriter socketOut = new PrintWriter(s.getOutputStream());
    socketOut.print("GET "+ req.url + "\n\n");
    //socketOut.print("Host: "+req.hostname);
    socketOut.flush();
    String line;
    while ((line = dis.readLine()) != null){
        System.out.println(line);
    }
} 
catch (Exception e){}
}

編集部分

これは私がしなければならないことです。禁止された Web サイトはブロックできますが、プログラムで他の Web サイトを許可することはできません。

フィルター プログラムでは、指定したポートで TCP ソケットを開き、接続を待ちます。リクエストが来ると (つまり、クライアントが Web サイトにアクセスするための URL を入力すると)、アプリケーションはそれを処理してアクセスを許可するかどうかを決定し、同じソケットを使用してクライアントに応答を返します。クライアントが WebPolice への接続を開いた後 (そして要求がチェックされて許可された後)、実際の Web ページをクライアントに表示する必要があります。したがって、ユーザーはすでに要求を出しているので、今度は WebPolice が要求を転送して、ユーザーが Web ページを取得できるようにする番です。したがって、WebPolice はクライアントとして機能し、Web ページを要求します。これは、(ユーザーへの接続を閉じずに) Web サーバーへの接続を開き、この接続を介してリクエストを転送する必要があることを意味します。返信を受け取り、それをクライアントに転送します。スレッドを使用して複数の接続を処理します (同時におよび/または異なる時間に)。

4

3 に答える 3

0

あなたが何をしようとしているのか正確にはわかりませんが、HTTP 要求を作成してその応答を読み取るには、ここで行ったことよりも多少多くのことが組み込まれています。いずれにせよ、Readline はバイナリ データでは機能しません。

URLConnectionクラスを見ることができます(ここで盗まれました):

URL oracle = new URL("http://www.oracle.com/");
URLConnection yc = oracle.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));

次に、オブジェクトからテキスト データまたはバイナリ データを読み取ることができinます。

于 2012-10-16T13:55:01.087 に答える
0

読み取り行は、読み取った行を文字列として扱うため、バイトへの変換をいじりたくない場合はお勧めしません。

読み取れなくなるまでバイトを読み取ってから、それらをファイルに書き出すだけです。これにより、テキスト以外のファイルを扱うときに重要なファイルヘッダーをそのまま維持して、画像を取得できます。

お役に立てれば。

于 2012-10-16T13:55:09.923 に答える
0

を使用する代わりに、 を使用しBufferedReaderてみてくださいInputStream。バイトを読み取るためのいくつかの方法があります。 http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html

于 2012-10-16T13:55:17.287 に答える