簡體   English   中英

Java,while循環中的BufferedReader問題

[英]Java, problems with BufferedReader in a while loop

我一直在努力前進。 從套接字接收線路時,此while循環似乎掛起。

這是代碼的服務器端:

out = new PrintWriter(socketcliente.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socketcliente.getInputStream()));
//receive and shows client data
            linea = 0;
            while ((buffer[linea] = in.readLine()) != null) {
                System.out.println(buffer[linea]);
                linea = linea+1;
            }
//asks for a command and sends it to client
            System.out.println("Enter remote command");
            while ((input = scanner.nextLine()) != null) {
                out.println(input);
            }

這是客戶端:

out = new PrintWriter(socketcliente.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socketcliente.getInputStream()));
//sends a limited amount of lines to the server
linea = 0;
        while (buffer[linea] != null) {
            out.println(buffer[linea]);
            linea = linea+1;
        }
//receive the command from server, executes and save output for sending to the server
        while ((comandor = in.readLine()) != null) {
            proceso = Runtime.getRuntime().exec(comandor);
            pinput = new BufferedReader(new InputStreamReader(proceso.getInputStream()));
            buffer = new String[100];
            linea = 0;
            while ((psalida = pinput.readLine()) != null) {
                buffer[linea] = psalida;
                linea = linea+1;
            }
        }

服務器打印收到的數據后,將不執行任何操作,也不會退出while循環。 必須將數據發送回客戶端。 我正在使用PrintWriter和BufferedReader。

編輯:更完整的代碼,以了解我在嘗試什么。 命令執行和輸出的保存運行良好,問題在於在服務器中接收數據,它獲取了所有數據,但在最后停止並且不退出第一個while循環。 如何允許它退出循環? 我嘗試在消息后從客戶端發送空字節,或服務器可以理解的“退出文本”,例如:

while ((buffer[linea] = in.readLine()) != null && (buffer[linea] = in.readLine()) != "quit")

我迷路了,沒找到怎么做。

所有這些都在try語句中。 沒用。 我是一個初學者,感謝您的幫助。

server side代碼中,您為line編寫的遞增行是錯誤的,必須將其更正為line = line+1; 因此,整個服務器端代碼必須如下所示

line = 0;
while ((buffer[line] = in.readLine()) != null) {
    System.out.println(buffer[line]);
    line++;
} 

而是將字符串讀取到StringBuilder-更少的分配,更快,更容易:

StringBuilder builder = new StringBuilder();
String aux = "";
BufferedReader pinput = new BufferedReader(new InputStreamReader(process.getInputStream()));

while ((aux = pinput.readLine()) != null) {
     builder.append(aux);
}

String text = builder.toString();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM