1

我正在尝试制作一个网络应用程序,用于概念验证项目。我需要保持连接打开,加入的客户端,但我正在运行的 while 循环永远不会退出第一个循环。代码:

public class comm implements Runnable {

    private Socket socket;
    private String line, input;
    boolean sending = true;
    boolean connected = false;
    private int me;
    private BufferedReader br;
    private PrintWriter pw;

    doComms(Socket server) {
       socket = server;
        me = Main.connected;
    }

    public void run() {
        try {
                br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                pw = new PrintWriter(socket.getOutputStream(), true);

            while (true) {

                System.out.println("Waiting");
                readCommand();
            }
        } catch (Exception ex) {
            System.out.println(ex);
        }
    }

    private void readCommand() throws Exception {

        String str;

        while (br.readLine() != null) {

            if (!connected) {
                pw.println("connect");
            }

            str = br.readLine();
            System.out.println(str);

            if (str.startsWith("!START!")) {
                System.out.println("User connected");
                connected = true;
                String[] split = str.split("#");
                Main.jTable1.getModel().setValueAt(split[1], me, 2);
                Main.jTable1.getModel().setValueAt(split[2], me, 3);
                Main.jTable1.getModel().setValueAt("Connected...", me, 4);
            }

        }
    }
}

启动该代码很好,它所做的只是为每个连接的用户创建一个新线程,并且客户端软件也运行良好。我究竟做错了什么?

4

2 回答 2

3

我最好的猜测。它永远不会退出第一个 readCommand 调用,因为 readCommand 本身处于无限循环中:

 while (br.readLine() != null) {

br.readLine 将阻塞,直到来自套接字输入的下一行到达。因此,退出循环的唯一方法是让远程客户端断开连接。

于 2012-07-06T04:09:56.567 回答
0

但是我正在运行的 while 循环永远不会退出第一个循环。

您指的第一个循环是:

while(true) { ... }

这永远不会退出,因为true它总是正确的。

于 2012-07-06T03:58:35.123 回答