使用DatagramSocket dsocket接收数据,无限超时堵塞接收操作,在某时刻想关闭它, 只用dsocket.close()函数行吗?是否还要其他操作? 高手请教!!!
      dsocket.setSoTimeout(0);
      packet = new DatagramPacket(buffer, buffer.length);
      dsocket.receive(packet);
      .....
      dsocket.close();
      dsocket = null;
      ......

解决方案 »

  1.   

    这些代码本身就在一个单独的接收线程的run函数中,此时可能正堵塞在receive函数,此时怎样关闭这个socket?
    dsocket.setSoTimeout(0);
    packet = new DatagramPacket(buffer, buffer.length);
    dsocket.receive(packet);
      

  2.   

    star_str(生命火花): 
    能具体点吗? 给几句例子代码吧
      

  3.   

    不知道你的具体情况,给你个建议吧
    public class ti extend threadboolean time;
    packet = new DatagramPacket(buffer, buffer.length);
    public ti(time){
       if(time == false){
       packet,close;
    }
    }在你的程序里
          dsocket.setSoTimeout(0);
          packet = new DatagramPacket(buffer, buffer.length);
          dsocket.receive(packet);
          .....
          dsocket.close();
          dsocket = null;
    如果你所说的某时刻到了 
    你就建立一thread的对象
    Thread ti = new Thread(false);
    t1.start();
      

  4.   

    star_str(生命火花): 
    不太明白:  packet,close;?
    我的程序里构造一个DatagramSocket dsocket = new DatagramSocket(port);
    再构造一个DatagramPacket,然后就接收数据.
      

  5.   

    算了给你一个现成的吧
    public class Datagramtest  public Datagramtest(){      dsocket.setSoTimeout(0);
          packet = new DatagramPacket(buffer, buffer.length);
          dsocket.receive(packet);
    }
    public Datagramtest getinstance(){ 
       return this;
    }public static void main(String....){
        
        if(xxx==xxx){
        thread t1 = new mythread(false);
    t1.start();
    }
    }public class MyThread extends threadprivate Datagramtest dt;
    public Mythread(choose){
       if(choose == false){
        dt.getinstance().close;
    }
    }