我正在尝试为 UDP 和 TCP 抽象 NIO 通道。 DatagramChannel 和 SocketChannel 已经非常相似。但是我遇到了一个问题。我现在尝试创建一个 DatagramChannelServer 而不是 ServerSocketChannel。我所做的是将一个未连接的 DatagramChannel 实例化为服务器,在任何读取操作中,我创建一个新的 DatagramChannel,将其连接到接收到的地址。因此,我有未连接的 DatagramChannel 应该从所有未连接的源接收传入数据,以及已连接的 DatagramChannel 从连接的源接收所有数据。
但这不起作用,因为所有接收到的数据,无论是否来自连接的源,都是由未连接的 DatagramChannel 接收的。您能否以某种方式优先处理键的顺序,使连接的 DatagramChannel 优先于未连接的 DatagramChannel?或者还有其他优雅的解决方案来解决这个问题吗?
此时我有一个(在我看来)不优雅的解决方案,它从未连接的 DatagramChannel 获取数据并将其插入到相应的连接的 DatagramChannel 中。不过我想要一个更适合框架的解决方案。
有人知道如何巧妙地做到这一点吗?
我所做的是实例化一个未连接的 DatagramChannel 作为服务器,在任何读取操作中,我创建一个新的 DatagramChannel,将其连接到接收到的地址。
为什么?您已经拥有了
DatagramChannel.
您不需要更多了。
根据 UDP 的性质,您应该将每个请求/响应视为完全独立的事务,没有会话上下文。因此,您所要做的就是接收数据报、计算回复、发送回复,同时
DatagramChannel.
我编写了一个基于 TCP 的 SSL 包装器。它适用于 SSL 客户端和 SSL 服务器!
现在我想使用 SSL 包装器进行 UDP 通信。
我的服务器启动 SSL UDP 端口。 我的客户端通过 Java 的 DatagramChannel 连接该 SSL 服务器端口,该端口由我的 SSL 包装器包装。连接已建立。
然后 SSL 握手开始,但在第一个 ClientHello 和 ServerHello 消息之后无法继续。
问:我是否需要从“未连接”的UDP服务器端口建立一个“已连接”的通道来完成SSL握手?谢谢。