【问题标题】:Continuous listening for UDP packets from Server持续监听来自服务器的 UDP 数据包
【发布时间】:2013-09-02 03:09:01
【问题描述】:

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

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

我是否应该设置一个重要的socket.setSoTimeout() 时间以使其循环次数最少?

我需要做什么:

能够从服务器请求特定的数据包,然后在不确定的时间内接收任意数量的数据包

【问题讨论】:

  • 你考虑过使用 Java NIO 吗?
  • chrylis 似乎建议使用 Java NIO,但我认为我无法处理复杂性
  • 你是否成功地实现了这一点。我在 android 中实现了 udp 侦听器,它在长时间运行后停止侦听数据包。 stackoverflow.com/questions/39271860/…

标签: java android sockets udp datagram


【解决方案1】:

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

如果您只有一个基本应用程序,则启动一个仅在 receive(packet) 上阻塞的线程。每当它返回(数据包到达)时,将数据包分派给某种处理程序。如果流量较低,这可能是其他线程正在监听的BlockingQueue;如果您的流量很大,您可以将作业发送到ExecutorService 以并行处理。

【讨论】:

  • 这是一个非常低流量的应用程序。我是一名初学者 Android 程序员,所以我认为接收(数据包)是我想要的。当我收到一个数据包时,我应该把它拖到我需要的地方并继续“听”吗?我实际上在做的是使用绑定服务(我什至不确定我是否需要),它设置了一个用于发送和接收的线程。然后我通过该服务返回信息...
  • 不要使用“线程”进行发送和接收。拥有一个专用线程,该线程只阻塞该方法,在数据包进入时接收数据包,并将它们分派给另一个线程上的处理程序。
  • 当我说“一个线程”时,我的意思是我有一个线程用于发送,然后另一个线程用于接收。使用处理程序发回数据包是个好主意!你能解释一下我是如何一直监听数据包的吗?是否带有 socket.receive(packet) 的(无限)循环?
  • 另外,我是否可以将处理程序消息从库发送到我的应用程序?(我的应用程序是主线程,然后我转到位于我的应用程序使用的库(我编写了两个代码)
  • 最简单的方法可能是让您的库在启动时接受BlockingQueue 参数。
猜你喜欢
  • 2019-11-14
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-24
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
相关资源
最近更新 更多