Socket编程 |
您所在的位置:网站首页 › Mpu6000读不到数据 › Socket编程 |
问题描述:用java编写一个客户端程序连接指定的IP和端口,一直收不到目标地址返回数据。 运行下面的代码收不到返回数据:(这段代码应该写在一个线程里) BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); System.out.println("接收服务器反馈: " ); StringBuffer buffer = new StringBuffer(); String line = ""; while ((line = br.readLine())!= null) { buffer.append(line); } br.close(); System.out.println(buffer.toString()); 运行下面的代码可以接收到返回数据: InputStream is=socket.getInputStream(); byte b[]=new byte[1024]; is.read(b); System.out.println(new String(b)); 原因分析: readLine()是读取到没有数据时就返回null(因为其它read方法当读到没有数据时返回-1),而实际上readLine()是一个阻塞函数,当没有数据读取时,就一直会阻塞在那,而不是返回null;因为readLine()阻塞后,System.out.println(message)这句根本就不会执行到,所以在接收端就不会有东西输出。要想执行到System.out.println(message),一个办法是发送完数据后就关掉流,这样readLine()结束阻塞状态,而能够得到正确的结果,但显然不能传一行就关一次数据流;另外一个办法是把System.out.println(message)放到while循环体内就可以。 readLine()只有在数据流发生异常或者另一端被close()掉时,才会返回null值。如果不指定buffer大小,则readLine()使用的buffer有8192个字符。在达到buffer大小之前,只有遇到"/r"、"/n"、"/r/n"才会返回。 --------------------- 作者:不眠的硅谷 来源:CSDN 原文:https://blog.csdn.net/csyyj/article/details/53455507 版权声明:本文为博主原创文章,转载请附上博文链接! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |