Java NIO(New IO)是Java 1.4版本引入的一个新模块,用于替代传统的IO流模型,其设计目标是提供一种更高效、更灵活的I/O操作方式。在Java NIO中,Socket通信的实现主要依赖于`java.nio`包下的Buffer、Channel、Charset和Selector等核心组件。 **Buffer**是NIO中的核心概念之一,它是一个可以临时存储数据的区域。Buffer有多种类型,如ByteBuffer、CharBuffer、IntBuffer等,分别对应不同数据类型的存储。在进行I/O操作时,数据会先被写入Buffer,然后从Buffer中读取,这种操作方式减少了数据复制的次数,提高了效率。 **Channel**是数据传输的通道,它连接到I/O设备(如文件、套接字、网络流等)。通过Channel,数据可以从源头读入Buffer,或者从Buffer写入目的地。Java NIO中的SocketChannel是用于网络通信的,可以用来进行TCP连接的读写操作。 **Charset**是用来处理字符编码和解码的,Java NIO提供了多种字符集转换方法,使得在网络传输中可以正确处理各种字符编码。 **Selector**是NIO中的另一个重要概念,它可以监控多个Channel的事件(如连接建立、数据到达等),实现了非阻塞I/O。这意味着一个线程可以同时处理多个连接,极大地提高了服务器的并发能力。 以下是一个简单的使用Java NIO实现Socket通信的示例: 1. **Server端**: - 创建一个ServerSocketChannel并绑定到指定的端口。 - 然后,注册Selector,监听accept事件。 - 当有新的连接请求到达时,Selector会返回一个SelectionKey,通过这个Key可以获取到对应的SocketChannel。 - 读取SocketChannel中的数据到Buffer,处理后写回数据。 2. **Client端**: - 打开一个SocketChannel,并连接到Server的地址和端口。 - 创建一个Buffer,将要发送的数据写入Buffer。 - 将数据从Buffer写入SocketChannel,发送给Server。 在实际应用中,`SerializableUtil`类用于将Java对象序列化为字节数组,便于通过网络传输。序列化是Java中将对象转换为字节流的过程,以便在网络或磁盘上存储和传输。`toBytes()`方法用于序列化对象,而`toObject()`方法用于反序列化字节数组回Java对象。 `MyRequestObject`和`MyResponseObject`类是具有序列化能力的Java对象,它们实现了`Serializable`接口,这样就可以通过`SerializableUtil`进行网络传输。Client端创建`MyRequestObject`,序列化后发送给Server;Server接收到数据后反序列化为`MyRequestObject`,处理请求并创建`MyResponseObject`作为响应,再序列化后返回给Client。 Java NIO通过Buffer、Channel、Selector等机制提供了更高效的Socket通信实现,特别是对于高并发的网络服务,NIO的优势更为明显。与传统的IO模型相比,NIO允许开发者用更少的线程处理更多的连接,降低了系统资源的消耗,提高了系统的整体性能。
2026-02-04 11:46:50 60KB java socket java
1
【Java socket编程】多人聊天室 源代码
2024-07-01 18:31:53 80KB socket java 编程语言
1
HP Sokcet JAVA调用源码,包含jna包及5.0.2版本的HP-Socket的dll文件,采用的是非常新的HP-Socket版本,demo是整套java工程,导入eclipse修改HpSocket.java文件中的服务器的IP和端口就可以测试,里面还包含了客户端接收服务器端返回的信息方法,看懂了客户端基本也可以自己实现服务端
2024-06-27 18:04:09 1.5MB java socket
1
第一步 充分理解Socket    1.什么是socket    所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。    以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。    重要的Socket API:    java.net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。    . Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。    . getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例,。    . getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。    注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。    2.如何开发一个Server-Client模型的程序    开发原理:    服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。    客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。    {建立服务器} import java.net.*; import java.io.*; ...... . . . . . . . .
2024-04-16 16:43:26 38KB
1
java语言,基于socket的多线程一对一聊天,暂不支持并发
2023-11-16 07:06:09 3KB java socket
1
几个用java写的小程序,实现了bio和nio
2023-10-15 07:00:46 19KB java socket Bio Nio
1
基于java的 简单echo程序,第一个实现了发送与返回 第二个是发送并返回名人名言 分别用了 TCP 和 UDP协议
2023-06-18 18:04:00 16KB java socket
1
java_socket_chat 一个用 java socket 完成的简易聊天程序 P2PClient 和 P2PServer 都是用 MyEclipse 2017 写的项目 P2PClient:客户端程序 P2PServer:服务端程序 可以先把 P2PClient 和 P2PServer 项目导入 Myeclipse 或者 Eclipse, 然后运行两个项目里的 Start.java 文件就能启动程序了。 也可以把两个项目都导出为可执行 jar 文件,直接双击运行即可启动程序。 当前直接双击 P2PClient.jar 文件就能打开客户端使用,客户端可以多开,后台的数据转发由我配置的服务器来进行。 因为这个聊天程序是能跨局域网即外网访问的,所以 P2PServer 服务端程序需要跑在外网服务器上该聊天程序才能正常运行。 所以要实现聊天功能还需要租外网服务器,这个我用的是阿里云的 EC
2023-06-04 17:40:53 45KB java socket myeclipse Java
1
java Socket实现登陆的小试 Socket新手框架
2023-04-22 12:20:54 16KB java;Socket
1
java socket 视频流转发socket.zip java socket 视频流转发socket.zip
2023-04-04 17:37:48 19KB socket
1