input.read()函数。锁定while循环

时间:2011-08-18 14:52:15

标签: java sockets inputstream

连接到服务器后,我在服务器上运行一些命令,然后尝试将服务器知识带到控制台;

while(i!=-1){
                String c="";
                String line = "";

                    try {
                        while ((i = input.read()) != 10 && i!=-1) {
                            bx[0] = (byte) i;
                            c = new String(bx);
                            line = line + c ;
                            System.out.print(c);
                        }
                    } catch (IOException e2) {
                        e2.printStackTrace();
                    }   
                    File outfile = new File("calltrak.txt");
                    boolean append = true;
                    try
                    {
                        if (!outfile.exists())
                        {
                            append = false;
                        }
                        FileWriter fout1 = new FileWriter("calltrak.txt",append);
                        PrintWriter fileout = new PrintWriter(fout1,true);
                        fileout.println(line);
                        fileout.flush();
                        fileout.close();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                    disp.append(line);
            }

但问题是当程序从服务器窗口读取所有行时,在服务器中它等待新输入并且我的程序仍然要读取行并因此锁定...我怎样才能解决这个问题......(注意:使用定时器不是一种解决方法,因为程序读取的行可以是100行或100000,有时服务器可以工作缓慢)(在代码“disp”中是Jpanel名称)

2 个答案:

答案 0 :(得分:1)

我使用并行线程解决了这个问题。通过启动Inputstream读取方法,我也启动了另一个线程,并在其中放入一个timer.If read方法等待超过5秒,其他线程传递-1到第一个循环,所以循环终止。

答案 1 :(得分:0)

您的代码在性能方面有几个问题,但要回答您的问题,您应该让服务器在末尾发送EndOfText 0x3或EndOfTransmission 0x4,然后以这种方式终止AsciiTable