首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DatagramSocket.receive()和SocketException

DatagramSocket.receive()和SocketException
EN

Stack Overflow用户
提问于 2014-07-08 20:32:28
回答 1查看 555关注 0票数 0

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

代码语言:javascript
复制
        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处理本身可以设置为true。)

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

问:有什么办法让这个想法奏效吗?还是我需要另一种方法?(注意:我不只是想在套接字上设置一个超时。对于这个应用程序来说,这不是一个好方法。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-09 00:21:21

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24641200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档