【问题标题】:DatagramChannel Server one unconnected channel and more connected channelsDatagramChannel Server 一个未连接的通道和多个连接的通道
【发布时间】:2013-12-16 12:24:27
【问题描述】:

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

但这不起作用,因为所有接收到的数据,无论是否来自连接的源,都由未连接的 DatagramChannel 接收。你能以某种方式优先考虑键是句柄的顺序,以使连接的数据报通道优先于未连接的数据报通道吗?还是有另一种优雅的解决方案来解决这个问题?

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

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

【问题讨论】:

    标签: java nio channel datagram


    【解决方案1】:

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

    为什么?你已经有一个DatagramChannel. 你不需要了。

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

    【讨论】:

    • 您好 EJP,感谢您的大开眼界。你是对的,一个数据报通道就足够了。所以我必须将数据转发到数据报通道到所属的虚拟连接。因为我在这里基本上只通过 UDP 创建虚拟连接和会话(如果由于 NAT 设置而无法使用 TCP 或不允许使用 TCP)。好点子,拍得好。
    猜你喜欢
    • 2012-02-15
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多