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は常に true であるため、これは決して終了しません。

于 2012-07-06T03:58:35.123 に答える