使用 BufferedReader 和 BufferedWrite 接收读取数据,用 readLine 无法接受数据,一直等待的解决方案:
1.因为BufferedReader#readLine检测读取完一行必须是通过检测换行符才判断一行读取完成,所以写数据就要加上"\r\n",也可用newLine()方法添加
2.写完数据后是否调用 flush() 方法冲水
参考:java socketclient 换行_Java Socket/SocketChannel通信/换行/问题/接收不到/消息_weixin_39518002的博客-CSDN博客
使用 OutputStream 和 InputStream "程序不等待" 的解决方案:
//我曾经写过这样一个读取输入流的代码,本意是好的,new 出的数组空间可以根据输入字节大小生成
InputStream is = s.getInputStream();
byte [] bs = new byte[is.available()];
is.read(bs);
1.上面的写法虽然不会造成读取时阻塞,但是 available 大概率读取到的是0,因为是网络通讯,数据并不会那么快的传输返回,这样子is.read()就会出现一系列问题,如:
1.越界(可能出现) 2.空指针(可能出现) 3.不报错读取空数据(已出现)