zoukankan      html  css  js  c++  java
  • JAVA TcpServer端使用Scanner读取不到数据的解决办法

      在使用JAVA进行Socket通信时,在Server端使用Scanner的nextLine()方法读取数据时,一直读取不到数据是因为Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取。这个扫描器在扫描过程中判断停止的依据就是“空白符”,空格、回车都算做是空白符。nextInt()方法在扫描到空白符的时候会将前面的数据读取走,但会丢下空白符“\r”在缓冲区中,但是,nextLine()方法在扫描的时候会将扫描到的空白符一同清理掉。

      在下面的Server端程序中,每次out.println("hello");后要flush一下因为选择了PrintWriter是有缓存的。在输入的字符串中要包含换行符“\r\n”,负责扫描器Scanner扫描不到结束标志:

     1         try {
     2             
     3             ServerSocket server = new ServerSocket(8189);
     4             Socket socket = server.accept();
     5             InputStream in = socket.getInputStream();
     6             OutputStream out = socket.getOutputStream();
     7 
     8             Scanner scanner = new Scanner(in);
     9     
    10             PrintWriter pw = new PrintWriter(out, true);
    11             pw.println("hello");
    12             pw.flush();
    13             
    14             pw.println("world");
    15             pw.flush();
    16             
    17             boolean bStop = false;
    18             while(!bStop&&scanner.hasNextLine()){
    19                 
    20                 String mString = null;
    21                 try{
    22                     mString = scanner.nextLine();
    23                 }catch(Exception e){
    24                     e.printStackTrace();
    25                 }
    26                 
    27                 if (mString.equals("STOP")) {
    28                     bStop = true;
    29                 }
    30                 pw.write(mString);
    31                 pw.flush();
    32             }
    33             
    34         } catch (IOException e) {
    35 
    36             e.printStackTrace();
    37         }
  • 相关阅读:
    带最小值操作的栈 · Min Stack
    删除排序数组中的重复数字 II · Remove Duplicates from Sorted Array II
    K组翻转链表 · Reverse Nodes in k-Group
    HTML DOM Style borderBottomLeftRadius 属性
    PHP For 循环
    PHP copy() 函数
    CSS border-left-color 属性
    ASP.NET Web Pages 文件夹
    no-empty-label (Rules) – Eslint 中文开发手册
    PHP ksort() 函数
  • 原文地址:https://www.cnblogs.com/centor/p/5750054.html
Copyright © 2011-2022 走看看