我有一個簡單的HTML服務器程序,它在端口8000上偵聽請求。我希望能夠從服務器程序請求HTML文件,並將請求的HTML發送回瀏覽器。目前,服務器接收到請求並從請求中解析請求的文件名,並且甚至將html文件的內容打印到控制檯。但是,當我嘗試將HTML文件內容打印到連接的套接字(返回到瀏覽器)時,什麼都不會發生;瀏覽器只是繼續加載。將服務器響應寫入瀏覽器:Java
我的服務器類比較簡單,只是創建這個運行的類,RequestHandler的情況下,爲每個連接:
package server;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class RequestHandler extends Thread {
Object block;
ServerSocket serverSocket;
BufferedReader socketReader;
PrintWriter socketWriter;
public RequestHandler(Object block, ServerSocket serverSocket){
this.block = block;
this.serverSocket = serverSocket;
}
@Override
public void run() {
try{
System.out.println("Waiting for request...");
Socket clientSocket = serverSocket.accept();
System.out.println("Connection made.");
synchronized(block){
System.out.print("Notifying server thread...");
block.notify();
System.out.println("...done");
System.out.println();
}
socketReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
socketWriter = new PrintWriter(clientSocket.getOutputStream(), true);
String input;
while((input = socketReader.readLine()) != null){
// System.out.println(input);
if(input.startsWith("GET")){
getResource(input);
}
}
}catch(IOException e){
System.out.println("IOException!");
e.printStackTrace();
}
}
public void getResource(String getRequest){
String[] parts = getRequest.split("\\s+");
String filename = parts[1].substring(1);
System.out.println(filename);
File resource = new File(filename);
sendResponse(resource);
}
public void sendResponse(File resource){
System.out.println(resource.getAbsolutePath());
Scanner fileReader;
try {
fileReader = new Scanner(resource);
while(fileReader.hasNext()){
String line = fileReader.nextLine();
System.out.println(line);
socketWriter.println(line);
}
} catch (FileNotFoundException e) {
System.out.println("File not found!");
e.printStackTrace();
}
}
}
你嘗試提供HTTP頭嗎?這可能有幫助... – alf
HTTP規範:http://www.w3.org/Protocols/rfc2616/rfc2616.html –
你是如何通過瀏覽器撥打電話的?什麼是URI的格式? –