问题1:服务器要判断客户端是否保持连接,心跳包怎么实现啊,最好给点代码学习一下
问题2:读写数据超时是用setSoTimeout()吗?

解决方案 »

  1.   

    1、在交互线程中设置一个Timer,每隔a秒向客户端发送一个简单的询问包,客户端收到后返回一个简单的答复语句则表示依然连接中。如发送后b秒未收到答复则表示客户端已经失去连接
    2、参加API,setSoTimeout()需要在阻塞前调用,阻塞超过指定时间后会停止阻塞并抛出java.net.SocketTimeoutException
      

  2.   

    有一个方法sendUrgentData,查看文档后得知它会往输出流发送一个字节的数据,只要对方Socket的SO_OOBINLINE属性没有打开,就会自动舍弃这个字节,而SO_OOBINLINE属性默认情况下就是关闭的。下面一段代码就可以判断远端是否断开了连接:try{
          socket.sendUrgentData(0xFF);
    }catch(Exception ex){
          reconnect();    //说明断开了.
    }