Java 连续侦听来自服务器的UDP数据包

Java 连续侦听来自服务器的UDP数据包,java,android,sockets,udp,datagram,Java,Android,Sockets,Udp,Datagram,我试图弄清楚如何实现一个客户端,该客户端不断地“准备”或“侦听”来自服务器的UDP数据包 我是否需要一直保持socket.receive(packet)运行,直到我收到一个,然后一旦收到,就再次打开它 我是否应该设置一个有效的socket.setSortimeout()时间,使其循环次数最少 我需要做什么: 能够从服务器请求特定的数据包,然后在不确定的时间内接收任意数量的数据包,这取决于您的通信量有多大,您可以查看NIO,尽管理解和使用NIO要复杂得多 如果您只有一个基本的应用程序,那么启动一个

我试图弄清楚如何实现一个客户端,该客户端不断地“准备”或“侦听”来自服务器的UDP数据包

我是否需要一直保持socket.receive(packet)运行,直到我收到一个,然后一旦收到,就再次打开它

我是否应该设置一个有效的
socket.setSortimeout()
时间,使其循环次数最少

我需要做什么:


能够从服务器请求特定的数据包,然后在不确定的时间内接收任意数量的数据包,这取决于您的通信量有多大,您可以查看NIO,尽管理解和使用NIO要复杂得多


如果您只有一个基本的应用程序,那么启动一个线程,该线程只阻塞
receive(packet)
。每当它返回(一个包已经到达)时,将该包分派给某种处理程序。如果流量低,这可能是另一个线程正在侦听的
阻塞队列
;如果您有高流量,您可能会将作业发送到
ExecutorService
以并行处理。

根据您的流量有多大,您可能会查看NIO,尽管理解和使用它要复杂得多


如果您只有一个基本的应用程序,那么启动一个线程,该线程只阻塞
receive(packet)
。每当它返回(一个包已经到达)时,将该包分派给某种处理程序。如果流量低,这可能是另一个线程正在侦听的
阻塞队列
;如果您的流量很大,您可能会将作业发送到
ExecutorService
并行处理。

您研究过使用Java NIO吗?chrylis似乎建议使用Java NIO,但如果您成功实现了这一点,我认为我无法处理复杂性。我在android中实现了udp侦听器,经过长时间的操作后,它会停止侦听数据包。你研究过使用Java NIO吗?chrylis似乎建议使用Java NIO,但我认为如果你成功地实现了这一点,我就无法应对这种复杂性。我在android中实现了udp侦听器,经过长时间的操作后,它会停止侦听数据包。这是一款流量非常低的应用程序。我是一个Android初学者,所以我认为接收(数据包)是我想要的。当我收到一个信息包时,我应该把它拖到我需要的任何地方,并保持“倾听”吗?实际上,我所做的是使用绑定服务(我甚至不确定我是否需要)来设置发送和接收线程。然后我通过该服务返回信息……不要使用“线程”发送和接收信息。有一个专门的线程,只在一个方法上阻塞,当数据包进入时接收数据包,并将它们发送给另一个线程上的处理程序。当我说“一个线程”时,我的意思是我有一个线程用于发送,然后另一个线程用于接收。使用处理程序发回数据包是一个好主意!你能解释一下我是怎么一直在听信息包的吗?它是否有一个套接字接收(数据包)的(无限)循环?另外,我是否可以将处理程序消息从库发送到我的应用程序?(我的应用程序是主线程,然后转到位于我的应用程序使用的库中的“接收”线程(我编写这两个代码)最简单的方法可能是让你的库在启动时接受一个
BlockingQueue
参数。这是一个流量非常低的应用程序。我是一个Android初学者,所以我认为接收(数据包)这就是我想要的。当我收到一个数据包时,我应该把它拖到我需要它的任何地方并继续“听”?我实际上在使用绑定服务(我甚至不确定我是否需要)来设置发送和接收线程。然后我通过该服务返回信息…不要使用“线程”用于发送和接收。有一个专用线程,它只阻塞一个方法,当数据包进入时接收数据包,并将数据包分派给另一个线程上的处理程序。当我说“线程”时我的意思是我有一个线程用于发送,然后另一个线程用于接收。使用处理程序发回数据包是一个好主意!你能解释一下我是如何一直监听数据包的吗?是不是有一个(无限)socket.receive(packet)循环?另外,我是否可以从库向我的应用程序发送处理程序消息?(我的应用程序是主线程,除此之外,我转到“接收”线程,该线程位于我的应用程序使用的库中(我编写两个代码)。最简单的方法可能是让您的库在启动时接受
BlockingQueue
参数。