我正在使用socket下一些东西,但是有时后网络很卡,在取得s.getInputStream(),以后read()的时候,阻塞了,一个1024b的数组,要读很长时间
我想在read()进行比如1分钟还没有读完就退出,或者抛异常,应该怎样做???还有,我曾经尝试了nio,我在网上找了很长时间都没有上面这个问题的相关处理,nio在客户端如何使用异步I/O,就是即使我ReadableByteChannel rbc = Channels.newChannel(dis);
int length = rbc.read(buffer);这样做了,能保证read()方法不会阻塞吗?不明白啊,我觉得好像不会,十分迷茫????

解决方案 »

  1.   

    Java的Socket本来就是阻塞的,如果想用非阻塞的,选用nio库。
    还有Socket本身有TimeoutException。
      

  2.   

    Java的Socket本来就是阻塞的,如果想用非阻塞的,选用nio库。 
    还有Socket本身有TimeoutException。
    UP
      

  3.   


    socket本来就是可以设置超时的
    然后捕捉Timeoutexception异常
      

  4.   

    Java的Socket本来就是阻塞的,如果想用非阻塞的,选用nio库。
    还有Socket本身有TimeoutException。
      

  5.   

    Socket 有设置超时时间的方法。楼主搜一下关键字即可。
      

  6.   

    如果说用一个WHILE(TRUE)只要它有你就读,,是不是就能实现了 ,呵呵
      

  7.   

    如何解决这种阻塞情况?   
        
      1)用非阻塞   
      2)把阻塞放入线程   
        
      1.同步阻塞和异步非阻塞方式各自一般都在什么应用情况中使用?请解释一下原理   
        
      原理请看书,同步阻塞常用于大流量客户数少,非阻塞方式相反   
        
      2.当client发送过来的流大小不能确定,而服务器又必须把所有接受流拼接在一起后才能处理时,如何动态增加存储内存,以防止浪费内存的现象   
      采用内存池技术,即先自己分配一块很大的内存,然后自己对它进行管理,以后程序中需要分配   
      内存,全部从这块内存中提取,程序退出时只需要释放一次。   
      

  8.   

    又学东西了
    呵呵
    如果用nio还可以用它的一些开源框架
    这样只处理业务逻辑问题就可以了
    前一段时间看了下mina
    LZ有兴趣可以共同研究啊
      

  9.   

    2楼朋友说的
    Java的Socket本来就是阻塞的,如果想用非阻塞的,选用nio库。 
    还有Socket本身有TimeoutException。
    不错
      

  10.   

    c中的read阻塞应该如何解决呢?