DatagramChannel Server 一个未连接的通道和多个已连接的通道

问题描述 投票:0回答:2

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

但这不起作用,因为所有接收到的数据,无论是否来自连接的源,都是由未连接的 DatagramChannel 接收的。您能否以某种方式优先处理键的顺序,使连接的 DatagramChannel 优先于未连接的 DatagramChannel?或者还有其他优雅的解决方案来解决这个问题吗?

此时我有一个(在我看来)不优雅的解决方案,它从未连接的 DatagramChannel 获取数据并将其插入到相应的连接的 DatagramChannel 中。不过我想要一个更适合框架的解决方案。

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

java nio channel datagram
2个回答
1
投票

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

为什么?您已经拥有了

DatagramChannel.
您不需要更多了。

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

DatagramChannel.


0
投票

我编写了一个基于 TCP 的 SSL 包装器。它适用于 SSL 客户端和 SSL 服务器!

现在我想使用 SSL 包装器进行 UDP 通信。

我的服务器启动 SSL UDP 端口。 我的客户端通过 Java 的 DatagramChannel 连接该 SSL 服务器端口,该端口由我的 SSL 包装器包装。连接已建立。

然后 SSL 握手开始,但在第一个 ClientHello 和 ServerHello 消息之后无法继续。

问:我是否需要从“未连接”的UDP服务器端口建立一个“已连接”的通道来完成SSL握手?谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.