HTTPプロキシを実装しようとしました(HttpはHttpの動作後に拡張機能になります)。私はインターネット上で多くのリソースを見つけ、今までのところすべての問題を解決しようとしました。しかし今、私は立ち往生しています。 私のProxoyはhttpウェブサイト全体をロードしません。私はソケットが既に閉じていると、多くのエラーメッセージが表示されます。だから私は閉じたSocketを介して何かを送信しようとしていると思う。Java Httpプロキシが正しく動作しない
問題が解決しました。なぜそれがこのようなのか分かりません。私はこの問題について多くのことを考えていますが、間違いを見つけることはできません。私の側からサーバーは、私のプロキシサーバーへの接続を閉じると、ソケットが閉じられるだけです。これは、サーバーからの入力ストリームで-1を読み取ったときに発生します。
私は
挨拶 クリストフ
public class ProxyThread extends Thread {
Socket client_socket;
Socket server_socket;
boolean thread_var = true;
int buffersize = 32768;
ProxyThread(Socket s) {
client_socket = s;
}
public void run() {
System.out.println("Run Client Thread");
try {
// Read request
final byte[] request = new byte[4096];
byte[] response = new byte[4096];
final InputStream in_client = client_socket.getInputStream();
OutputStream out_client = client_socket.getOutputStream();
in_client.read(request);
System.out.println("---------------------- Request Info --------------------");
System.out.println(new String(request));
Connection conn = new Connection(new String(request));
System.out.println("---------------------- Connection Info --------------------");
System.out.println("Host: " + conn.host);
System.out.println("Port: " + conn.port);
System.out.println("URL: " + conn.URL);
System.out.println("Type: " + conn.type);
System.out.println("Keep-Alive:" + conn.keep_alive);
server_socket = new Socket(conn.URL, conn.port);
InputStream in_server = server_socket.getInputStream();
final OutputStream out_server = server_socket.getOutputStream();
out_server.write(request);
out_server.flush();
Thread t = new Thread() {
public void run() {
int bytes_read;
try {
while ((bytes_read = in_client.read(request)) != -1) {
out_server.write(request, 0, bytes_read);
out_server.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
t.start();
int bytes_read;
while ((bytes_read = in_server.read(response)) != -1) {
out_client.write(response, 0, bytes_read);
out_client.flush();
//System.out.println("---------------------- Respone Info --------------------");
//System.out.println(new String(response));
}
//System.out.println("EIGENTLICH FERTIG");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
client_socket.close();
server_socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
EDIT :-)任意の助け幸せになる: 私のHTTPプロキシが機能するようになりました。あなたはrylが何をしているのか理解すれば答えはかなり有益です。
クライアントが1つのWebサイト/ Webサーバーにのみ要求を送信しますか?私たちは常に同じポート/ホスト名を持っていますか?
答えのループは非常に便利ですが、どこに配置すると思いますか?
最後にお考えください:ありがとうございました。@EJPさんのお返事はとても役に立ちました。それを理解する時間がかかりました!
あなたが確認できます。http://www.javaworld.com/article/2077322/core-java /core-java-sockets-programming-in-java-a-tutorial.html。それは助けることができます! –
@ SunilChakravarthyオラクルが提供する完全なネットワーキングのチュートリアルがある場合、なぜ20年前の雑誌記事を掘り起こしているのか分かりません。 – EJP
古い記事が間違っています!私はあなたの問題を解決するとき、記事の年齢は問題ではないと言います。少なくとも、それは物事がどのように行われたかについてのアイデアを与えることができます。何を言います! @EJP –