ServerSocket返回数据给客户端数据的超时问题

场景:多线程环境下,客户端通过Socket发送请求给ServerSocket,现在ServerSocket需要去取数据并返回给Socket。取数据的过程时间是不定的,现在要求设置一个超时时间,如果ServerSocket取数据的时间超过一个定值就通知客户端超时并关闭socket。
问题:请问如何设置这个超时时间。

注意:Socket和ServerSocket已经建立了连接。

我想通过一个定时器来实现,不知道可不可以;是否还有什么更好的办法?
求解!!!

[code="java"]
public class MyServerSocket extends Thread
{
public MyServerSocket(ServerSocket serverSocket,long timeout){
this.serverSocket=serverSocket;
this.timeout=timeout;
}
private ServerSocket serverSocket;
private Socket socket;
private Thread thread ;

private long timeout=1000000;

public Socket accept() throws Exception{
   this.start();
    thread =   new Thread() {
            public void run() {
                    acc();
              }
     };
     thread.start();
     while(thread.isAlive()){
         if(!this.isAlive()){
             //这里想让它停止取数好像有点不容易,直接stop进程有点不靠谱
             thread.stop();
             throw new Exception("accpet time out");
         }
     }
   return socket;
}
private void acc() 
{
    try {
        socket=serverSocket.accept();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
@Override
public void run()
{
    while(timeout>0){
        try {
            sleep(1000);
            timeout-=1000;
        } catch (InterruptedException e)  {
            e.printStackTrace();
        }
    }
}

}
[/code]

setSoTimeout(int timeout)可以试一下。
也可以用定时器。
写一个TimerTask,socketserver接收到这个连接的时候就可以把这个连接与timertask绑定。
TimerTask run里面就是判断连接有没有关闭,没关闭就把它关闭。

[quote]
setSoTimeout(int timeout)不行吧.这个是在accept()时的超时.我现在是已经建立连接了的.
[/quote]
setSoTimeout(int timeout)是读取数据的超时,代表这段时间内没有接收到数据就断开。
这个应该不满足你的要求,你的需求是socketserver取数据超过一段时间还没取到就断开。在这个层面的话只能用业务代码来搞了,因为tcp层不知道socketserver去其他地方取数据的行为。
所以采用定时器结合回调函数来搞比较保险。