日期:2014-05-17  浏览次数:20652 次

java socket实现B/S后台,input流读数据的时候被阻塞
记得之前写过,没遇到阻塞的问题,这随便写了一下居然就遇到了。
貌似是InputStream读不到正文,只能读到http的头。
那么我要怎么读取全部前台传来的数据呢?
好奇怪我之前怎么没遇到这个问题。
socket java

------解决方案--------------------
阻塞的话你可以分析下:
isr.read()没有读取到一个字节的数据,而客户端的连接仍然存在,那么服务端就会一直等待,直到读取到数据(即阻塞)。 为什么没有读到这一个字节的数据,你要找找原因了。服务端看不出什么端倪,把客户端发送数据的代码贴出来看看。
------解决方案--------------------
你是浏览器直接访问localhost:88吗?
从HTTP1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
但是你server端一直等待着read。所以一直等待浏览器的输入。浏览器上也一直等待,所以就是你看到的卡了。你可以把浏览器的等待关了。
在最后加个打印,可以看出来
osw = new OutputStreamWriter(s.getOutputStream());
            osw.write("<html><head><title>test</title></head><body>测试</body></html>");
System.out.println("done");

------解决方案--------------------
检查一下你的服务器端的代码吧。看看服务器端的socket的输出流是否进行了下面的操作:
out.flush();
如果没有flush,就会造成阻塞