要想实现类似的功能需要用到jdk1.4中新增的nio包。
去看这方面的文档吧。
大概要用到这几个类:
java.nio.channels.ServerSocketChannel 
java.nio.channels.SocketChannel
java.nio.channels.SelectionKey

解决方案 »

  1.   

    to jsyx():
    哪里有这些相关文档呀??能不能告知相关网址??Thank you..
      

  2.   

    to jsyx():
    哪里有这些相关文档呀??能不能告知相关网址??Thank you..
      

  3.   

    没有类似“onReceive”,“onDisconnect”等事件可供捕获的吧!
    若想判断它的状态,有方法的!
      

  4.   

    to lotofu(骆驼):
    那岂不要专门开一个线程来判断???
      

  5.   

    to lotofu(骆驼):
    我是希望能够利用事件来触发这些动作,而不是不断地查询socket的状态,得到状态后再去执行相应的函数,你明白我的意思吗?我想java的socket功能这么强大,这方面的功能应该不会少吧??
      

  6.   

    to xxlcg(☆突突☆):
    具体如何实现,能否说说??
      

  7.   

    把一个线程做成一个事件接收器不是好的解决方式。因为,旧的socket仍然是block方式的,如果没有数据过来线程就会进入blocked状态。因此如果你要控制很多个socket的话,仍然需要开大量的线程,这就需要花大量的系统资源,过多的线程会使程序的性能严重下降。如果是用jdk1.4的话仍然建议用nio。nio提供的nonblocking方式,可以让你用一个线程或少量的几个线程控制几百甚至上千个socket通讯。http://java.sun.com/j2se/1.4/nio/index.html
    http://www-900.ibm.com/developerWorks/cn/java/j-javaio/index.shtml详细可以参考O'Reilly出版的,《java nio》
      

  8.   

    to  jsyx():
    好的,我去看看,谢谢~~to xxlcg(☆突突☆):
    如何把线程做成一个事件接收器呢?是不是在线程中不断的查询socket的状态,如果发现状态有变,则执行相应的事件触发函数呢??谢谢~~
      

  9.   

    agree:)如果是用jdk1.4的话仍然建议用nio。nio提供的nonblocking方式,可以让你用一个线程或少量的几个线程控制几百甚至上千个socket通讯。
      

  10.   

    楼上几位对NIO很熟悉啊。我还没有搞过呢。呵呵。实现事件接收器请参看EventListener接口。不过缺点也正如如上所讲。
      

  11.   

    http://www.jdon.com/concurrent/nio%D4%AD%C0%ED%D3%A6%D3%C3.htm
    有一个很好的例子呀,还有注释的
      

  12.   

    做事件接受器可以参考一般的java教材,但它的缺点确实跟楼上的高手说的一样
      

  13.   

    NIO好像只有connect,accept,read,write四种状态可捕捉,那disconnect呢?应该如何捕捉?有没有高手做过呀??
      

  14.   

    to jsyx():
    这么说来,还是要另外开一个类来实现这个事件接收器了??
      

  15.   

    万事俱备,只欠东风了,如何能够实时地得知一个socket被close掉了呀?哪位高手知道呢??最好不要用事件接收器哦~~~~~
      

  16.   

    to jsyx():
    说了半天,还是要用老办法,看来只有这样了,晚上再没什么好办法就结贴了,谢谢各位~~
      

  17.   

    其实如果要是写聊天室这类的东西,对于socket close这类的东西完全可以靠Exception来控制。
    不行的话,可以用一个线程定时遍历所有的SocketChannel,向对端写一个空的ByteBuffer。
    ByteBuffer b=ByteBuffer.allocate(1);
    b.flip();
    channelSocket.write(b);这样做实际上什么都没写,如果有Exception,就是对端已经close了。