场景:多线程环境下,客户端通过Socket发送请求给ServerSocket,现在ServerSocket需要去取数据并返回给Socket。取数据的过程时间是不定的,现在要求设置一个超时时间,如果ServerSocket取数据的时间超过一个定值就通知客户端超时并关闭socket。问题:请问如何设置这个超时时间。注意:Socket和ServerSocket已经建立了连接。我想通过一个定时器来实现,不知道可不可以;是否还有什么更好的办法?求解!!!
3 回答
慕后森
TA贡献1802条经验 获得超5个赞
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(); } } } }
qq_笑_17
TA贡献1818条经验 获得超7个赞
setSoTimeout(int timeout)可以试一下。
也可以用定时器。
写一个TimerTask,socketserver接收到这个连接的时候就可以把这个连接与timertask绑定。
TimerTask run里面就是判断连接有没有关闭,没关闭就把它关闭。
添加回答
举报
0/150
提交
取消