Я пишу что-то вроде прокси-программы на Java. Вот как это работает:
- Браузер будет подключен к программе.
- Любые запросы браузера будут сначала распечатаны на стандартный, а затем перенаправлены на сервер.
- Затем сервер возвращает ответ, который также распечатывается на стандартный вывод, а затем пересылается обратно в браузер.
Моя проблема в том, что шаг 1 работает, шаг два работает, но шаг 3 не выполняется. Программа может получить ответ, и его распечатка стандартно распечатывается, но браузер не может его получить. Я изменил программу, чтобы изолировать проблему.
Все, что здесь происходит, - это распечатка ответа прямо в браузере:
ServerSocket client = null;
try {
client = new ServerSocket(snoopPort);
} catch (IOException e) {
System.out.println("ERROR: Could not listen on port: " + snoopPort);
System.exit(-1);
}
Socket clientSocket = null;
try {
clientSocket = client.accept();
} catch (IOException e) {
System.out.println("ERROR: Accept failed on port: " + snoopPort);
System.exit(-1);
}
PrintWriter snoopOut = new PrintWriter(clientSocket.getOutputStream(), true);
snoopOut.print("HTTP/1.1 200 OK\r\n");
snoopOut.print("Date: Thu, 05 Feb 2009 06:37:28 GMT\r\n");
snoopOut.print("Server: Apache\r\n");
snoopOut.print("Set-Cookie: Apache=99.245.58.244.1233815848703045; path=/\r\n");
snoopOut.print("Accept-Ranges: bytes\r\n");
snoopOut.print("Transfer-Encoding: chunked\r\n");
snoopOut.print("Content-Type: text/html\r\n");
snoopOut.print("\r\n");
snoopOut.print("<html><head><title>test</head><body>hello world!</body></html>\r\n");
snoopOut.close();
clientSocket.close();
client.close();