我是一個真正的java新手,所以請原諒我,如果這是一個絕望的直接問題。Java if/else behaviour奇怪
我從我的Java遊戲服務器執行以下操作:
所有的// Get input from the client
DataInputStream in = new DataInputStream (server.getInputStream());
PrintStream out = new PrintStream(server.getOutputStream());
disconnect=false;
while((line = in.readLine().trim()) != null && !line.equals(".") && !line.equals("") && !disconnect) {
System.out.println("Received "+line);
if(line.equals("h")){
out.println("h"+EOF); // Client handshake
System.out.println("Matched 1");
}else if (line.equals("<policy-file-request/>")) {
out.println("..."+EOF); // Policy file
System.out.println(server.getInetAddress()+": Policy Request");
disconnect=true;
System.out.println("Matched 2");
}else if(line.substring(0,3).equals("GET")||line.substring(0,4).equals("POST")){
out.println("HTTP/1.0 200 OK\nServer: VirtuaRoom v0.9\nContent-Type: text/html\n\n..."); // HTML status page
disconnect=true;
System.out.println("Matched 3");
} else {
System.out.println(server.getInetAddress()+": Unknown command, client disconnected.");
disconnect=true;
System.out.println("Matched else");
}
}
server.close();
首先,客戶端發送一個「H」數據包,並希望同退(握手)。但是,我希望它在收到無法識別的數據包時斷開客戶端連接。出於某種原因,它對握手和HTML狀態請求做出了很好的響應,但是當存在未知數據包時,else子句從不執行。
感謝
什麼是未知包的內容替換
substring().equals
?你可以打印出來,然後你可以至少遍歷代碼,看看可能發生了什麼。當存在「未知」數據包時會發生什麼? – DaveJohnston 2010-05-22 10:19:47OT,但是:'(line = in.readLine()。trim())!= null'會讓你在流結束時遇到麻煩,它會拋出一個'NullPointerException',因爲你會嘗試在'readLine'返回的'null'上調用'trim'。 – 2010-05-22 10:21:05
你能告訴我們什麼「收到」調試行顯示你的測試未知數據包? – 2010-05-22 10:22:14