Java NIO 实现客户端与服务端通信

1 下载量 32 浏览量 更新于2024-08-28 收藏 69KB PDF 举报
"本资源提供了一个使用Java NIO(非阻塞I/O)实现的简单TCP客户端和服务端的示例代码。" 在Java中,NIO(New IO)是一种I/O模型,它提供了与标准Java IO不同的编程接口,主要用于提高I/O操作的效率,特别是在处理大量并发连接时。NIO的核心组件包括通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。在这个示例中,我们将探讨如何使用NIO来创建一个TCP客户端和服务端。 客户端部分(TcpNioClient): 1. 首先,`SocketChannel`是NIO中的一个类,用于处理TCP连接。`SocketChannel.open()`方法创建了一个未连接的`SocketChannel`实例。 2. `configureBlocking(false)`将通道设置为非阻塞模式,这意味着如果尝试执行的操作不能立即完成,它不会阻塞,而是返回一个标识,表明操作尚未完成。 3. `InetSocketAddress`用于指定服务器的IP地址和端口号,这里是"192.168.X.XXX:8848"。 4. `connect(address)`方法尝试建立到服务器的连接。在非阻塞模式下,如果连接未完成,它会立即返回`false`,客户端可以执行其他任务,然后定期检查连接状态,直到连接建立完成。 5. `ByteBuffer`是NIO中用于存储数据的容器。在这里,它被用来封装要发送的消息 "你好服务器,我在等你"。 6. `write(buffer)`方法将缓冲区中的数据写入到通道,即发送到服务器。 服务端部分(未完全提供): 服务端通常会包含以下步骤: 1. 创建一个`ServerSocketChannel`,这是服务器端用来监听新连接的通道。 2. 使用`ServerSocketChannel.bind()`方法绑定到特定的端口,等待客户端连接。 3. 一旦有客户端连接,`accept()`方法会返回一个新的`SocketChannel`,代表与客户端的连接。 4. 设置这个新的`SocketChannel`为非阻塞模式,并准备接收来自客户端的数据。 5. 使用`read()`或`read(ByteBuffer)`方法从通道读取数据,通常会在循环中进行,直到没有更多数据可读。 6. 读取到数据后,可以处理这些数据,例如,打印出来或者回应客户端。 7. 当完成与客户端的交互后,关闭相关的通道。 注意,服务端的代码不完整,没有显示如何处理连接、读取和发送数据的详细部分。完整的服务器端代码应该包括上述步骤,以及异常处理和资源关闭。 这个简单的例子展示了NIO在TCP通信中的基本用法,但实际应用可能需要更复杂的架构,比如使用选择器(Selector)来管理多个客户端连接,或者实现更复杂的数据编码和解码机制。