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

Java DatagramChannel服务器一个未连接的通道和多个已连接的通道,java,nio,channel,datagram,Java,Nio,Channel,Datagram,我试图为UDP和TCP抽象NIO通道。DatagramChannel和SocketChannel已经非常相似了。然而,我遇到了一个问题。我现在尝试创建一个DatagramChannel服务器,而不是ServerSocketChannel。我所做的是将一个未连接的DatagramChannel实例化为服务器,在任何读取操作中,我创建一个新的DatagramChannel,并将其连接到接收到的地址。所以我有一个未连接的数据通道,它应该从所有未连接的源接收输入数据,还有一个连接的数据通道,它从连接的源

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

但是,这不起作用,因为所有接收到的数据,无论是否来自连接的源,都是由未连接的DatagramChannel接收的。您能否以某种方式将键作为句柄的顺序进行优先级排序,使连接的数据通道优先于未连接的数据通道?还是有其他优雅的解决方案

目前,我有一个(在我看来)非优雅的解决方案,它从未连接的数据通道获取数据,并将其插入相应的连接数据通道。不过,我希望有一个更适合该框架的解决方案

有人想知道怎么干净利落地做吗

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

为什么??您已经有了一个
数据报频道。
您不再需要了


在UDP的本质上,您应该将每个请求/响应视为一个完全独立的事务,没有会话上下文。因此,您所要做的就是在相同的
数据报频道上接收数据报,计算回复,发送回复。

你好,EJP,谢谢您的帮助。你是对的,一个数据报通道就足够了。因此,我必须将数据转发到数据报通道,以连接到所属的虚拟连接。因为我在这里基本上只创建UDP上的虚拟连接和会话(在由于NAT设置而无法或不允许TCP的情况下)。说得好,说得好。