你可以使用Socket的setSoTimeout(int timeOut);方法来设置等待接受数据包的等待时间,单位为毫秒
还有线程中有一个join(long millis);方法,好象也是关于等待时间的,我记不太清楚了,你再查查docs文档吧。

解决方案 »

  1.   

    listen_socket = new ServerSocket(port);
    listen_socket.setSoTimeout(600000);
    如果我这样设置了serversocket,如果60秒之内没有数据包传输的话,会怎么样呢?
      

  2.   

    楼上的,我是想知道这个timeout到底有什么用?是不是可以用来维持一个客户端的连接?比如说服务端已经accept了一个客户端连接,in/out也已经建立了起来,是不是如果不手动把它close掉,它就可以维持60秒之后会自动断开呢?
      

  3.   

    接收到异常以后手动close,他不会自动帮你close的
      

  4.   

    你自己试试不就知道了
    就如你写的 , 到了60秒 抛了异常,那么在catch中你再来个传输数据的语句,如果又抛了异常,那就说明连接已经不存在了;不抛,那不就证明还在连接么。
      

  5.   

    比如timeOut设置了60秒,只要60秒内没有接受到任何数据包则抛出一个异常,你可以在异常中作出响应的处理,我想这样应该可以实现你的要求。
      

  6.   

    Socket和ServerSocket都有setSoTimeout(int timeOut);方法,不过就你说的情况建议不要在ServerSocket上设置,控制客户端就够了。
      

  7.   

    listen_socket = new ServerSocket(port);
    listen_socket.setSoTimeout(600000);
    要抛出异常的话,接下来该如何写?
      

  8.   

    在catch(Exception Ex){}中close啊,你不是想关闭吗?
      

  9.   

    public void run() {
          try {
            do {
              client.setSoTimeout(600000);
              InputStream in = client.getInputStream();
              OutputStream out = client.getOutputStream();
              service.serve(in, out);
            }
            while(true);
          }
          catch (SocketTimeoutException e) {log(e);}
          catch (IOException e) {log(e);}
          finally {
            try{client.close();}
            catch(IOException e){log(e);}
            endConnection(this);
          }
        }