0

以下是在“out.close();”上给我一个“代码无法访问”的消息 我找不到问题,因为它或多或少与我运行的其他代码相同!

import java.io.*;
import java.net.*;

public class MyClient {
    private static String SERVER = "127.0.0.1";
    private static Integer PORT = 8765;
    public static void main(String[] args) throws IOException {
        // Connect to the server and create the writer and reader
        Socket socket = new Socket(SERVER,PORT);
        PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        // Loop forever
        while(true) {

            out.println("Question:");
            String sum = System.console().readLine();
            out.println(sum);

            String line = in.readLine().trim();
            if(line==null || line.startsWith("Finished")) {
                socket.close();
                return;
            }
            else if (line.startsWith("My answer is: ")){
                System.out.println(line);
                String message = System.console().readLine();//correct or wrong!!
                out.println(message);
            }       
        }
        // Close the in and out and socket
        out.close();
        in.close();
        socket.close();
    }
}
4

5 回答 5

4

您正在循环return内执行操作。while你应该这样做break

于 2015-03-07T14:08:53.327 回答
1

因为代码永远不会到达:

    // Close the in and out and socket
    out.close();
    in.close();
    socket.close();

更改returnbreak

    if(line==null || line.startsWith("Finished")) {
        socket.close();
        break; //<------------------CHANGE
    }
于 2015-03-07T15:04:49.883 回答
0

这就是问题所在

 // Loop forever
        while(true) {

它会永远循环,你永远不会停止它,所以循环之后的下一行永远不会被执行。就是这样:P

于 2015-03-07T14:09:15.260 回答
0

因为您有一个无限循环 ( while(true)),没有中断或其他退出方式。

于 2015-03-07T14:09:47.367 回答
0

在循环内做 a 不是一种好的风格return,但如果想确保释放资源,你可以用 a 包装你的循环try ... finally

try {
  while(true) {
    // ...
    if(condition) {
      return;
    }
    // ...
  }
} finally {
  out.close(); // this is called just before leaving the surrounding function
  // ...
}

即使在循环内抛出异常,这也有效。

于 2015-03-07T14:14:57.420 回答