使用javaNIO实现C/S模式的通信

本文介绍了如何利用Java NIO实现非阻塞的客户端-服务器通信模式,适用于处理大量连接且数据量较小的场景。通过一个线程轮询通道并处理事件,减少了线程间的IO切换。此外,提供了学习NIO架构和原理的链接,以及简单的C/S通信代码示例,帮助初学者快速入门。
摘要由CSDN通过智能技术生成

NIO使用非阻塞IO的方式实现,服务器与客户端的交流,适用于大量连接,而数据量少的情况。通过一个线程轮询所有的通道,处理注册的事件,而主线程可以继续干其他的事情。这样所有的I/O都交给一个线程处理,减少了线程IO的切换。如果具体学习NIO的架构和原理请点击下面的连接

点击打开链接 http://ifeve.com/selectors/

以下为一个使用NIO实现的C/S通信模式,对应简单例子学习,可以更容易入手。

服务端代码如下:

主线程类:MainChannel

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;

public class MainChannel {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 声明服务器监听通道 和select选择器
		ServerSocketChannel serverChannel = null;
		Selector selector = null;

		try {
			// 实例化selector 此种实例化模式说明 selector 是单例的
			selector = Selector.open();
			// 实例化服务器监听端口
			serverChannel = ServerSocketChannel.open();
			// 绑定监听地址。
			serverChannel.socket().bind(new InetSocketAddress(8881));
			// 设置channel为非阻塞模式,一定要非阻塞模式才能注册到selector中
			serverChannel.configureBlocking(false);

			// 把监听通道注册到选择器中, 监听此通道的连接事件。SelectionKey.OP_ACCEPT 指定为连接事件。
			serverChannel.register(selector, SelectionKey.OP_ACCEPT);
			//所有通道,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值