场景:多线程环境下,客户端通过Socket发送请求给ServerSocket,现在ServerSocket需要去取数据并返回给Socket。取数据的过程时间是不定的,现在要求设置一个超时时间,如果ServerSocket取数据的时间超过一个定值就通知客户端超时并关闭socket。
问题:请问如何设置这个超时时间。
注意:Socket和ServerSocket已经建立了连接。
我想通过一个定时器来实现,不知道可不可以;是否还有什么更好的办法?
求解!!!
场景:多线程环境下,客户端通过Socket发送请求给ServerSocket,现在ServerSocket需要去取数据并返回给Socket。取数据的过程时间是不定的,现在要求设置一个超时时间,如果ServerSocket取数据的时间超过一个定值就通知客户端超时并关闭socket。
问题:请问如何设置这个超时时间。
我想通过一个定时器来实现,不知道可不可以;是否还有什么更好的办法?
求解!!!
[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]