クライアントに送信しているファイルに、将来の HTTP 要求を表す他のリンクされたファイルが含まれていることを考慮して、次の HTTP 応答を適切に管理する方法を考えています。
本文が終了したことをクライアントに示す PrintWriter を閉じることができることはわかっていますが、それを行うと、「first.html」内のリンクされたページに対する後続の要求を受け取る方法がわかりません。content-length ヘッダーを含めようとしましたが、「first.html」ブロック/ストールを送信した後に入力ストリームから読み取ろうとすると、長さを誤って計算した可能性があります。これは、first.html ファイルの送信が完了したことをクライアントが認識していないことを示しています。私はRFC 2616を読みましたが、率直に言って、適切な例がないと理解できません。プロトコルに関しては、私は本当の子供なので、助けていただければ幸いです。
public static void main(String[] args) throws Exception{
ServerSocket serverSocket = new ServerSocket(80);
Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),true);
String s;
while (!(s = in.readLine()).isEmpty()) {
System.out.println(s);
}
out.write("HTTP/1.0 200 OK\r\n");
out.write("Content-Type: text/html\r\n");
out.write("Content-Length: 1792\r\n");
out.write("\r\n");
File html = new File("/Users/tru/Documents/JavaScript/first.html");
BufferedReader htmlreader = new BufferedReader(new InputStreamReader(new FileInputStream(html)));
int c;
while((c = htmlreader.read()) > 0){
out.write(c);
}
}