在我做一个聊天室的时候服务器与客户端都有一个while死循环对输入输出流进行监听。不断的读出数据。为什么当读出的数据为空时候他会等待另一头的输入呢?

解决方案 »

  1.   

    那个accept方法在没有数据来的时候是阻塞的,也就是说卡在那里不会往后面走的,后面的read自然不会调用
      

  2.   

    Sorry,我说错了,那个accept的意思是开始接收,阻塞的是后面的read
      

  3.   

    在read和write流的时候,你也应该另外启动线程来操作
      

  4.   

    JDK中Socket对象的read操作是阻塞操作;你可以使用JDK1.4 后的NIO,其中提供selector对象,实现异步方式通讯
      

  5.   

    阻塞读的时候,如果对方不发送数据,接收方的线程是被阻塞的。
    这个时候,不能称为“读出的数据为空”,因为read方法并没有返回,而是线程被阻塞了。
      

  6.   

    ServerSocketChannelpublic abstract SocketChannel accept()
                                  throws IOException接受到此通道套接字的连接。 
    如果此通道处于非阻塞模式,那么在不存在挂起的连接时,此方法将直接返回 null。否则,在新的连接可用或者发生 I/O 错误之前会无限期地阻塞它。