我是一个真正的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