ForeveroLo 2012-03-20 18:25 采纳率: 0%
浏览 628
已采纳

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

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

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

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

  • 写回答

3条回答

  • ll89308839 2012-03-21 08:27
    关注

    [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]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 chaquopy python 安卓
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题