當我寫接收HTTP請求的服務器(僅限GET方法,從學校簡化工作的一部分)爲什麼scanner.hasNext()塊讀取HTTP請求
我以前Socket
類來獲取連接 我再使用InputStream
以及Scanner
來讀取http請求。
但是,當我正在使用hasNext()
逐行讀取http請求標題時。該程序掛在hasNext()
,等待更多的投入,即使它已經消耗了所有線路。
下面是我readRequest
方法:
public void readRequest(Socket client) throws BadRequestException {
StringBuilder builder = new StringBuilder();
try {
Scanner sc = new Scanner(client.getInputStream());
sc.useDelimiter("\\r\\n");
while(sc.hasNext()){
builder.append(sc.next());
builder.append("\n");
}
parseRequestFromClient(builder.toString());
} catch (IOException e) {
throw new BadRequestException(e.getMessage());
}
您是否嘗試過任何調試? – xenteros
你確定你正在閱讀你的循環中的任何東西嗎?我沒有看到任何實際上向服務器發送頭的部分是關於什麼類型的請求(它是GET還是別的什麼,你想從服務器獲得哪個資源)。如果沒有這個頭文件服務器,可能只是等待,並不會發送任何可能含有'hasNext()'的東西。 – Pshemo
@xenteros是的,我用Eclipse進行調試。它一直停在'while(sc.hasNext())'這一行。 –