DatagramChannel服务器一个未连接的通道和更多连接的通道

时间:2013-11-30 12:48:40

标签: java nio channel datagram

我正在尝试为UDP和TCP抽象NIO通道。 DatagramChannel和SocketChannel已经非常相似。但是我遇到了一个问题。我现在正在尝试创建一个DatagramChannelServer而不是ServerSocketChannel。我做的是我实例化一个未连接的DatagramChannel作为服务器,在任何读取操作我创建一个新的DatagramChannel,我连接到收到的地址。所以我有未连接的DatagramChannel,它应该接收来自所有未连接源的连接数据以及从连接源接收所有数据的连接DatagramChannel。

然而,这不起作用,因为未连接的DatagramChannel接收所有从连接的源接收的数据。您能以某种方式优先处理密钥处理的顺序,其方式是Connected DatagramChannels优先于未连接的DatagramChannels吗?还是有另一个优雅的解决方案来解决这个问题?

此时我有(在我看来)非优雅的解决方案,它从未连接的DatagramChannel获取数据并将其插入相应的连接DatagramChannel。但是,我希望有一个更适合该框架的解决方案。

有人知道如何巧妙地做到这一点吗?

1 个答案:

答案 0 :(得分:1)

  

我所做的是实例化一个未连接的DatagramChannel作为服务器,在任何读取操作中我创建一个新的DatagramChannel,我连接到收到的地址。

为什么呢?您已经拥有DatagramChannel.您不再需要了。

在UDP的本质中,您应该将每个请求/响应视为完全独立的事务,而不使用会话上下文。因此,您所要做的就是在同一DatagramChannel.

上收到数据报,计算回复,发送回复。