首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MulticastSocket保持监听功能

MulticastSocket保持监听功能
EN

Stack Overflow用户
提问于 2017-07-13 03:03:09
回答 1查看 470关注 0票数 1

我正在开发一个基于UDP的套接字应用程序,这里有一些关于如何在接收端实现侦听功能的问题。

  1. 下面是让接收端套接字一直监听服务器端的好方法吗?假设我不知道服务器端何时将数据包发送到接收端,所以我需要始终保持接收功能。它是错过了,还是一些如何打破时间(真)循环?如果是,如何“重新连接”并使侦听循环再次活动? 同时(真){尝试{ if ( udpsocket_receiving.isClosed() x !udpsocket_receiving.isConnected() ){ serverAddress = InetAddress.getByName(SERVERIP);udpsocket_receiving =新MulticastSocket(SERVERPORT);udpsocket_receiving.joinGroup(serverAddress);udpsocket_receiving.setSoTimeout(10000);} udpsocket_receiving.receive(recpacket);//代码块与包} catch ( SocketTimeoutException E){ //如果我捕捉到这个异常怎么办?}最后{ udpsocket_receiving.close();继续;}
  2. 以上方法是否已经解决了如果我在一定时间内没有互联网接入,假设该方法总是被SocketTimeoutException捕获,对吗?但是,当互联网访问恢复以后,我还能继续监听时,包来吗?
  3. 假设我从发送方获得了第一个数据包,并执行了代码,但是发送方在这段时间发送了第二个数据包,我会错过这个数据包吗?因为第一个数据包上的while循环没有结束。
  4. 下面是一种手动关闭套接字并再次“重新连接”它的好方法吗?它会以某种方式绑定端口而不能使用同一个端口重新创建一个对象吗?如果这是正确的代码块,那么我是否应该对SocketTimeoutException中的端口进行质疑? udpsocket_receiving.leaveGroup(serverAddress);udpsocket_receiving.disconnect();udpsocket_receiving.close();udpsocket_receiving =新MulticastSocket(SERVERPORT);udpsocket_receiving.setSoTimeout(10000);udpsocket_receiving.joinGroup(serverAddress);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-13 03:34:32

不是的。您永远不会连接套接字,所以dpsocket_receiving.isConnected()永远不会是真的。在read循环中,您不需要所有那些关闭的/打开的废话。唯一一个要关闭插座的人就是你。SocketTimeoutException意味着在读取超时期间内没有收到任何数据报。您要做的事情取决于您自己,也许什么也没有,但这并不意味着您必须关闭和重新初始化套接字。重做所有这些并不能解决互联网连接问题。

您通常会错过数据包的唯一方法是丢包,但是关闭和重新打开套接字提供了一个窗口,其中肯定会发生这种情况。不要这样做。

关闭套接字时,您所要做的就是关闭它。离开它的所有多播组是自动的,就像断开连接一样,而且由于您从未连接过它,所以没有必要在第一个palce中断开它。

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

https://stackoverflow.com/questions/45070731

复制
相关文章

相似问题

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