【发布时间】:2017-12-17 15:38:56
【问题描述】:
我正在开发一个基于 UDP 的套接字应用程序,在这里我遇到了一些关于如何在接收端实现监听功能的问题
-
下面是让接收端套接字继续监听服务器端的好方法吗?假设我不知道服务器端何时将数据包发送到接收端,所以我需要保持接收功能始终开启。它会错过还是如何打破 while(true) 循环?如果是,如何“重新连接”并使监听循环再次活跃?
while(true){ try{ if ( udpsocket_receiving.isClosed() || !udpsocket_receiving.isConnected() ) { serverAddress = InetAddress.getByName(SERVERIP); udpsocket_receiving = new MulticastSocket(SERVERPORT) ; udpsocket_receiving.joinGroup(serverAddress); udpsocket_receiving.setSoTimeout(10000); } udpsocket_receiving.receive(recpacket); // Block of code to do with the packet } catch ( SocketTimeoutException e ) { // What suppose to do here if I catch this exception? } finally { udpsocket_receiving.close(); continue; } } 如果我有一段时间不能上网,上面的方法是否已经解决了,假设该方法总是会捕获到 SocketTimeoutException 对吗?但是以后上网恢复时,包来了还能继续听吗?
假设我从发送方收到了第一个数据包,并执行了代码,但是发送方在那个时候发送了第二个数据包,我会错过这个数据包吗?由于第一个数据包上的 while 循环没有结束。
-
下面是手动关闭套接字并再次“重新连接”它的好方法吗?它会以某种方式绑定端口并且不能再次使用同一个端口来新建对象吗?如果这是正确的代码块,我应该将那些放在
SocketTimeoutException中的问题之一?udpsocket_receiving.leaveGroup(serverAddress); udpsocket_receiving.disconnect(); udpsocket_receiving.close(); udpsocket_receiving = new MulticastSocket(SERVERPORT) ; udpsocket_receiving.setSoTimeout(10000); udpsocket_receiving.joinGroup(serverAddress);
【问题讨论】:
标签: android sockets udp multicastsocket