java - 从输入流套接字Java读取多行

标签 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())

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

最佳答案

如果没有下一行,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();
         }
    }
}

关于java - 从输入流套接字Java读取多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33628910/

相关文章:

java - 在Java游戏中播放小声音

Java找不到符号

c - 使用 C 无法从 TCP 套接字正确接收数据

java - 我的 java 客户端无法与我的 python 服务器一起使用

c - 传输端点未连接 recv 套接字

c++ - boost::asio::async_read 在简单示例中 100% CPU 使用率

Java 通过 TCP 发送对象

java - 如何以隐式 Intent 接收发送和接收多个数据?

java - 如何在Spring Cloud DataFlow中注册应用程序?

java - Java 中的条件赋值