java socket服务器 ,socket.getInputStream()读取时阻塞
2018-03-13 19:46
471 查看
贴代码:
解释为:socket流没有结束符。。。
虽然不知道这个解释对不对,但是使用注释掉的代码替换红色部分,正常运行
使用javaio读取socket接收的无协议传输流,使用ready()方法可以解决一次性完整读取问题
public static void main(String[] args){
MessageDeal deal = new MessageDeal(); deal.init(); } public void init(){ try { ServerSocket serverSocket = new ServerSocket(port); Socket socket = null; while (true){ socket = serverSocket.accept(); DealThread dealThread = new DealThread(socket); new Thread(dealThread).start(); } } catch (IOException e) { e.printStackTrace(); } } private class DealThread implements Runnable{ private Socket socket; public DealThread(Socket socket){ this.socket = socket; } @Override public void run() { BufferedWriter writer = null; InputStream in = null; BufferedReader reader = null; OutputStream os = null; try { System.out.println("开始读流"); in = socket.getInputStream(); /*reader = new BufferedReader(new InputStreamReader(in,"GBK")); char[] bt = new char[8]; do { if ((reader.read(bt))!=-1){ // System.out.println(data); } }while (reader.ready()); socket.shutdownInput(); System.out.println("读取完毕");*/ BufferedInputStream bis = new BufferedInputStream(in); int n = 0; while ( (n =bis.read()) != -1){ System.out.println(n); } os = socket.getOutputStream(); writer = new BufferedWriter(new OutputStreamWriter(os, "GBK")); writer.write(successMsg); writer.flush(); }catch (Exception e){ e.printStackTrace(); }finally { try { if (reader != null) reader.close(); if (in != null) in.close(); if (writer != null) writer.close(); if (os != null) os.close(); if (socket != null) socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }使用阻塞javaio读取socket流时,在红色部分进行while循环时始终无法读到-1,使用各种XXStream和XXReader都不行,网上借鉴的还是不靠谱,
反复查看java doc也没能解决参考一下博客:http://blog.csdn.net/qq_27680317/article/details/72899394
解释为:socket流没有结束符。。。
虽然不知道这个解释对不对,但是使用注释掉的代码替换红色部分,正常运行
使用javaio读取socket接收的无协议传输流,使用ready()方法可以解决一次性完整读取问题
相关文章推荐
- Java,InputStream,Socket阻塞.(关于HTTP请求的IO问题自我总结)
- 为何JAVA从File中读取数据不会阻塞,而从Socket中读取数据会阻塞
- 我的c++服务器记录----非阻塞下的socket读取操作
- SSLSocket getInputStream()阻塞问题分析
- 我的c++服务器记录----非阻塞下的socket读取操作
- Java启动子进程,子进程又启动孙进程后,Java在InputStream inputStream = process.getInputStream();中读取时,何时会返回null?
- 关于Java socket读取阻塞解决方法20150731-刘海伦
- java的nio之:java的bio流下实现的socket服务器同步阻塞模型和socket的伪异步的socket服务器的通信模型
- Java IO 文件读取问题记录(class.getResourceAsStream 和 new FileInputStream)
- java InputStream读取数据问题
- C#(服务器)与Java(客户端)通过Socket传递对象(序列化 json)
- redis 从服务器给主服务器发送ACK时,主服务器长时间不读取socket,则会出现错误。
- Java读取GIS服务器数据
- JAVA使用JeasyOPC读取OPC 服务器数据
- Why do I get EOF exception while reading a datainputstream in java?
- java20 创建服务器:ServerSocket
- Java从网络批量读取图片并保存至本网站服务器后再插入文章中
- JAVA代码:通过Socket读取返回的数据
- java.lang.IllegalStateException: getInputStream() has already been called for this request该异常的解决方法!
- Java读取网络数据(新浪网址)InputStream的数据流操作实录笔记(二) 分享出来供大家参考!(