Socket编程

您所在的位置:网站首页 Mpu6000读不到数据 Socket编程

Socket编程

2023-09-13 09:27| 来源: 网络整理| 查看: 265

问题描述:用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