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         }
时间: 2024-10-06 09:59:42

JAVA TcpServer端使用Scanner读取不到数据的解决办法的相关文章

【转载】 java利用snmp4j包来读取snmp协议数据(Manager端)

https://www.cnblogs.com/xdp-gacl/p/4187089.html http://doc.okbase.net/yuanfy008/archive/265663.html java利用snmp4j包来读取snmp协议数据(Manager端) 1 snmp简单介绍 java利用snmp4j包来读取snmp协议数据,很简单的一个流程,就是利用java来读取运行snmp协议的数据,例如服务器.PC机或者路由器等运行了snmp协议的设备. snmp协议是什么呢? 简单网络管理

'java'不是内部或外部命令,另一个解决办法

我知道环境变量,也知道搞系统变量.别给我粘那些教程了,我的java路程是C:\Program Files\Java\jdk1.6.0_05谁弄好了把那三个变量和值发出来.... JAVA_HOME=C:\Program Files\Java\jdk1.6.0_05CLASSPATH=C:\Program Files\Java\jdk1.6.0_05\lb\tools.jar 设定好后开个CMD 运行java --------------------------------------------

[JAVA] IOException: Invalid byte 2 of 2-byte UTF-8 sequence(解决办法)

日志打印不全,后台只打印出出标题的异常信息: 先前的日志打印信息:log.debug(e.getMessage()); 后面改成了日志打印信息:log.debug(e); log.debug(e.getStackTrace()); 日志打印的重要性,不能单单只打印Message   问题原因查找,这个问题在微信支付的维权功能中出现,在网上找了原因之后,下面这个连接给出的最准确: http://blog.csdn.net/linkyou/article/details/3975491   根本原因

java 不允许同一账户不同IP 同时登录系统解决办法 兼容IE Firefox

需求就是 不允许同一个账户同一时间登录系统.只要有一个账户在线其他人就是不能用这个账户. 功能很简单,过程很纠结 . 这篇文章解决了兼容IE.Firefox 浏览器下,不同IP 地址 同一用户同时登陆的解决办法,包括应对浏览器没有正常关闭的情况. 说下解决过程,本来以为用session存取就好了,后来只能在同一个浏览器内标签窗口好用.跨浏览器就不行.因为sessionId不一样.(经测试 跟sessionID 没关系 ) 网上找了一些解决办法.又是些监听器 又是写 方法的: 又是数据库加字段判断

windows和linux下读取文件乱码的终极解决办法!

乱码是个很恶心的问题. windows和linux读取txt文件,一旦读取了,编码发生改变,就无法再还原了,只有重启项目. 网上有很多方法都是读取文件头,方法很好,但是亲测都不能用(右移8位判断0xff的,取3个字节的-1,-2的,大体上网上最多就这两种). 后来偶然发现一个方法,CharsetPrinter. 这个方法需要引入jar包,非常好用. public static String guessEncoding(String filename) { try { CharsetPrinter

Android Stduio 发生 Process 'command 'somePath:java.exe'' finished with non-zero exit value 2 异常的解决办法

有时你会发现,在你使用Android Studio 进行编译的时候提示: Error:Execution failed for task ':demo:dexDebug'.> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'java.exe'' finished with non-zero exit value 2 为什么会这

Java中OutOfMemoryError(内存溢出)的三种情况及解决办法

相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识. 在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识.jvm管理的内存大致包括三种不同类型的内存区域:Permanent Generation space(永久保存区域).Heap space(堆区域).Java Stacks(Java栈).其中永久保存区域主要存放Class

启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法

一.问题描述 今天一来公司,在IntelliJ IDEA 中启动Tomcat服务器时就出现了如下图所示的错误: 错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java.net.BindException: Address already in use: JVM_Bind 这里说的是1099端口被其它进程占用了. 二.解决办法 找出占用1099端口的进程,

(转)Java中OutOfMemoryError(内存溢出)的三种情况及解决办法

面试时面试关问了有关内存溢出的出现情况和解决方法,网上百度了下,在此感谢 作者liqianbnu总结. 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识.在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识.jvm管理的内存大致包括三种不同类型的内存区域:Permanent Generation space(永久保存区域).H