Ale*_*lex 1 java sockets if-statement
我是java的真正新手,所以请原谅我这是一个毫无希望的直截了当的问题.
我的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();
Run Code Online (Sandbox Code Playgroud)
首先,客户端发送一个"h"数据包,并期望返回(握手).但是,我希望它在收到无法识别的数据包时断开客户端.由于某种原因,它对握手和HTML状态请求作出了很好的响应,但是当存在未知数据包时,从不执行else子句.
谢谢
根据您的评论中添加的信息,似乎将发生的是客户端发送单个字符(例如'n').这条线
line.substring(0,3).equals("GET")||line.substring(0,4).equals("POST"))
Run Code Online (Sandbox Code Playgroud)
将被执行,但因为line只有一个字符line.substring(0,3)会抛出一个StringIndexOutOfBoundsException.这可能导致您的程序失败,而您没有提到.或者你在代码的另一部分中进行了一些异常处理,这些异常处理是在你没有显示的代码的另一部分中进行的,这或者是在压制错误或打印日志行或者其他东西而你又没有提到过(或者注意到它).
尝试更换substring().equals与startsWith
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |