[英]Java Proxy - Can't receive response from host/Socket issue
I am coding a simple Java proxy. 我正在编写一个简单的Java代理。 The general architecture was given to me (method signatures etc), and this is how the Main class looks:
给出了一般的体系结构(方法签名等),这是Main类的外观:
private static Socket clientSocket;
private static ServerSocket client;
private static int myPort;
public static void init(int port) throws IOException {
client = new ServerSocket(port);
clientSocket = client.accept();
}
public static void handle(Socket clientSocket) {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
HttpRequest httpRequest = new HttpRequest(in);
String hostname = httpRequest.getHost();
//443 hardcoded from reading the http headers.
//Testing using isitchristmas.com
Socket serverSocket = new Socket(hostname, 443);
BufferedReader out = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
HttpResponse httpResponse = new HttpResponse(out);
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
try {
myPort = Integer.parseInt(args[0]);
try {
System.out.println("Initializing socket...");
init(myPort);
} catch (IOException e) {
System.out.println("[ERROR]: " + e.getMessage());
}
handle(clientSocket);
} catch (Exception e) {
System.out.println("[ERROR]: " + e.getMessage());
}
}
However the console hangs and never completes a request when reading in HttpResponse
class: 但是,在读取
HttpResponse
类时,控制台将挂起并且永远不会完成请求:
public HttpResponse(BufferedReader fromServer) throws IOException {
String line;
String statusLine = "";
// Never goes past here
while ((line = fromServer.readLine()) != null) {
if (line.isEmpty()) {
break;
}
if (line.toLowerCase().contains("status")) {
statusLine = line;
}
response.append(line);
}
if (!response.toString().isEmpty()) {
getDataAndHeadersFromResponse(response.toString());
System.out.println("\n\nHTTP Response:\n");
System.out.println("Status Line: " + statusLine);
System.out.println("Header Lines: " + headerLines + "\n\n");
System.out.println("Data: " + data);
}
}
I suspect it has something to do with how I am creating the sockets... not calling close()
on ServerSocket
gives off a Address already in use: JVM_Bind exception. 我怀疑这与我创建套接字的方式有关...在
ServerSocket
上不调用close()
会释放出一个已在使用的地址:JVM_Bind异常。 I also don't seem to get the serverSocket parameters right. 我似乎也没有正确获得serverSocket参数。 As you can tell by now I'm not very versed in socket programming.
正如您现在所知道的,我对套接字编程不是很精通。 What is wrong here?
怎么了
BufferedReader
, as you have to count bytes, not chars. BufferedReader
解决此问题,因为您必须计算字节而不是字符。 \\r\\n
, not \\n
. \\r\\n
,而不是\\n
。 The assignment is deficient in: 作业不足:
BufferedReader
BufferedReader
DataInputStream
for reading from the server DataInputStream
DataInputStream
at all: InputStream
would suffice DataInputStream
: InputStream
就足够了 Students should complain. 学生应该抱怨。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.