猿问

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

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

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

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


慕丝7291255
浏览 1109回答 3
3回答

慕后森

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

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

相关分类

Java
我要回答