从inputstream socket Java读取多行

时间:2015-11-10 11:26:43

标签: java sockets tcp client-server inputstream

我想从输入流套接字读取多行。

public void sendAsync(HashSet<Socket> socketHashset, Vector<String> vectors, 
PrintWriter printwriter) throws IOException, InterruptedException {

    ExecutorService service = Executors.newSingleThreadExecutor();
    service.execute(() -> {
        for(Socket v : socketHashset){
            //this.printwriter =  new PrintWriter(v.getOutputStream(),true);
            for(String str: vectors ){
                this.printwriter.println(str);
                this.printwriter.flush();
            }
        }
    });
    /* Receiver */

    while(true){
        try {
             printWriter.println(keybordScanner.nextLine())
             while(scannerBuffer.hasNextLine()){
                 System.out.println(scannerBuffer.nextLine());
             }
        } catch(NoSuchElementException e){
            e.printStackTrace();
        }
    }
}

问题是编译器阻塞然后检查“hasNextLine”

while(scannerBuffer).hasNextLine())

我如何解决这个问题?一些替代方案。

1 个答案:

答案 0 :(得分:0)

如果没有下一行, scannerBuffer.hasNextLine()将不返回false,但是将等待一行,在这种情况下将返回true,或者套接字将关闭,在这种情况下它将返回异常。如果您希望程序在等待输入时能够执行其他操作,请创建一个用于读取输入的线程。在等待输入时线程将被阻止,但程序的其余部分不会被激活。

Thread readingThread=new Thread(new readFromSock(scannerBuffer));
readingThread.start();

并制作另一个课程:

class readFromSock implements Runnable{
    Scanner scannerBuffer;
    public readFrom(Scanner scan){
        scannerBuffer=scan;
    }
    public void run(){
        try {
             while(scannerBuffer.hasNextLine()){
                 System.out.println(scannerBuffer.nextLine());
             }
         } catch(NoSuchElementException e){
             e.printStackTrace();
         }
    }
}