DatagramSocket.receive()和SocketException

时间:2014-07-08 20:32:29

标签: java multithreading sockets

我有一个线程,其作用是坐在DatagramSocket上,侦听传入的数据包,并将它们放入队列中进行进一步处理。它的运行方法是:

        public void run() {
        while(!disconnected) {
            byte[] buffer1 = new byte[FrameSizeBytes];
            DatagramPacket RxPacket = new DatagramPacket(buffer1,buffer1.length);
            try {
                RxSocket.receive(RxPacket);
            } catch (IOException e) {
                // handle exception
            }
            buffer1 = RxPacket.getData();
            Q.add(buffer1);
        }
    }

我有另一个线程,它的工作是决定何时终止此线程。 它通过将disconnected变量设置为true并关闭套接字来完成此操作。 想法是关闭套接字会将线程解锁为异常;可以处理例外情况;一旦处理了异常,循环条件就会导致循环退出。 (或者,exception处理本身可以将disconnect设置为true。)

问题:在这种情况下抛出的异常是SocketException: socket closed,这非常有意义。但DatagramSocket.receive()不会抛出SocketExceptions,因此我无法处理它或抛出它。

问题:有没有办法让这个想法发挥作用,还是我需要找到另一种方法? (注意:我不只是想在套接字上设置超时。这对于这个应用程序来说不是一个好方法。)

1 个答案:

答案 0 :(得分:1)

设置标志,发送一个虚拟数据包,然后关闭套接字。在receive()之后,在处理数据包之前检查标志,