对于服务器 socketChannel (ServerSocketChannel),唯一(也只能)关心的操作是 OP_ACCEPT(表示一个新的客户端连接)。
一般一个线程应可以共享一个 Buffer 。
在没有客户端请求时,Selector.select() 将一直堵塞。应该将此做为唯一的堵塞时刻(在 I/0 Socket 中,在读数据时也会堵塞),做为服务器一般会无限循环此条件。
在自 Selector.selectedKeys().iterator() 中得到的 SelectionKey 时,就应该调用 iterator 的remove() 方法将其自集合中删除,防止忘记删除或删除地点不统一。
客户端的读或写等操作应在 ServerSocketChannel 的 OP_ACCEPT 事件中进行初始注册(注册后会在下一次 Selector.select() 循环时调用)。即注册与客户端建立连接后要做的事情。然后在其他相应的操作中注册其他事件(一次会话在不同事件中相互调用)。
在 OP_ACCEPT 事件中应将客户端通道设置为非阻塞模式以允许服务器处理多个并发连接。
在读或写操作时应将对 Buffer 的操作放在循环中,以免一次不能处理完毕 Buffer 中的全部数据。
一次循环有时只能处理读或写的一部分操作(视 Buffer 大小与传递数据多少等而定),剩余数据将在下一次 Selector.select() 循环时处理,这与 I/O Socket 中等待数据全部到达时再处理从根本上不相同,要转变思想。
若希望关闭与客户端的会话只需将客户端通道关闭即可。
深入研究了 NIO Socket ,才深深体会到 Apache MINA 设计的美妙!
分享到:
相关推荐
**Socket编程在NIO中的应用**: 1. **ServerSocketChannel**:用于监听客户端连接,通过调用`ServerSocketChannel.open()`创建,然后绑定到指定的IP和端口,并调用`accept()`方法接收客户端连接。 2. **...
使用NIO socket不需要多线程来处理多个连接的请求,效率非常高 可以作为NIO socket入门的例子,Reactor模式,重点理解key.attach, jar文件里包含了源代码 1,运行server.bat启动服务器,可以打开编辑,修改端口号 ...
本例包含服务器端和客户端,多线程,每线程多次发送,Eclipse工程,启动服务器使用 nu.javafaq.server.NioServer,启动客户端使用 nu.javafaq.client.NioClient。另本例取自javafaq.nv上的程序修改而成
### Java NIO 实现Socket通信详解 #### 一、NIO与传统IO的区别及优势 在探讨如何使用Java NIO实现Socket通信之前,我们需要先理解NIO(Non-blocking I/O,非阻塞I/O)与传统阻塞I/O之间的区别。 **传统阻塞I/O...
`Socket`在NIO中的实现是`SocketChannel`,它代表了网络上的一个连接。`ServerSocketChannel`则用于监听客户端的连接请求。通过`ServerSocketChannel`的`accept()`方法,服务器可以接收新的客户端连接,然后将其注册...
Ioserver java Nio socket 框架 是个不错的NIO 通讯框架,本来想学习mina框架,看了看mina的源码太头痛,本人觉得看懂了Ioserver 再看mina的框架,想多的学习 java NIO 的也可以下载 看看,很值得学习啊!!!
java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...
在这个“基于java NIO的socket通信demo”中,我们将探讨如何使用NIO进行服务器和客户端的Socket通信,并解决通信过程中的字符集乱码问题。 首先,我们来看`NioServer.java`。这个文件中包含了一个基于NIO的服务器端...
NioSocket是一个基于Java NIO(非阻塞I/O)技术实现的网络通信框架,它包含服务器端(Server)和客户端(Client)两部分。在Java编程中,NIO(New Input/Output)提供了一种不同于传统IO模型的I/O操作方式,其核心...
标题“nio.rar_NIO_NIO-socket_java nio_java 实例_java.nio”表明这个压缩包包含了一个关于Java NIO的实例,特别是关于NIO套接字(Socket)的编程示例。NIO套接字是Java NIO库中用于网络通信的关键组件,它们允许...
标题中的“Java socketA_java nio_java socket a”可能是指使用Java NIO实现的Socket通信,这里的"A"可能是表示"Advanced"或"Alternative",意味着比传统的阻塞I/O模型更为高级或替代方案。 在Java Socket API中,...
总的来说,"默蓝网络通信测试工具(NIOSocket工具)"凭借其对TCP/IP和HTTP通信的支持,以及Java NIO Socket编程的优势,为网络通信开发人员提供了全面的测试解决方案,是进行网络通信开发和优化的得力助手。...
在Java编程领域,Socket是网络通信的基础,它允许两个或多个应用程序通过TCP/IP协议进行数据交换。本篇文章将深入探讨如何使用Java NIO(非阻塞I/O)来实现阻塞多线程通信,这对于高性能服务器端应用尤其重要。我们...
描述中提到的"用nio想的一个不阻塞NIOSocket例子"可能是一个Java NIO的Socket通信示例,利用NIO的Channel和Selector来实现客户端和服务器之间的非阻塞通信。通常,NIO中的SocketChannel用于网络通信,Selector用于...
3. 开发复杂度:Mina NIO需要对Java NIO有深入理解,而普通Socket相对简单,学习曲线较平缓。 4. 扩展性:Mina提供了丰富的功能,如协议编码解码、事件驱动模型等,使其更容易扩展和维护。 5. 社区支持:Mina作为一...
总的来说,Java Socket大文件传输涉及到网络通信的基础原理,如TCP和UDP协议,以及提高效率和性能的技术,如文件分片、组装和NIO。通过理解并应用这些知识点,开发者能够构建出高效、可靠的文件传输系统。对于希望...
《NIO与Socket编程技术指南》是一本深入探讨Java NIO(New Input/Output)和Socket编程的专业书籍,由高洪岩撰写。本书主要针对Java开发者,旨在帮助他们理解和掌握这两种在开发网络应用中至关重要的技术。 Java ...
在Java中,Socket主要分为两种模式:BIO(Blocking I/O)和NIO(Non-blocking I/O)。这两个模式分别有不同的应用场景和优缺点。 **一、Java Socket BIO** BIO,即阻塞I/O模型,是Java最初提供的网络通信方式。在...