java NIO非阻塞方式的Socket编程

本文介绍了Java NIO在Socket编程中的应用,强调了非阻塞方式如何提高程序性能。通过Selector和Socket通道的使用,避免了传统阻塞方式的等待,实现了高效的事件驱动。文章提供了一个简单的服务端和客户端程序示例,展示了NIO非阻塞Socket编程的基本步骤。
摘要由CSDN通过智能技术生成

1.非阻塞方式的Socket编程:

传统阻塞方式的Socket编程,在读取或者写入数据时,TCP程序会阻塞直到客户端和服务端成功连接,UDP程序会阻塞直到读取到数据或写入数据。阻塞方式会影响程序性能,JDK5之后的NIO引入了非阻塞方式的Socket编程,非阻塞方式的Socket编程主要是使用Socket通道和Selector通道选择器,将Socket通道注册到通道选择器上,通过通道选择器选择通道已经准备好的事件的进行相应操作。

NIO socket简单例子如下:

import java.net.*;
import java.nio.channels.*;
import java.util.*;
import java.io.*;

public class NIOSocket{
	private static final int CLINET_PORT = 10200;
	private static final int SEVER_PORT = 10201;
	//面向流的连接套接字的可选择通道
	private SocketChannel ch;
	//通道选择器
	private Selector sel;
	public static void main(String[] args) throws IOException{
		//打开套接字通道
ch = SocketChannel.open();
//打开一个选择器
sel = Selector.open();	
try{
	//获取与套接字通道关联的套接字,并将该套接字绑定到本机指定端口
		ch.socket().bind(new InetSocketAddress(CLINET_PORT));
		//调整此通道为非阻塞模式
		ch.configureBlocking(false);
		//为通道选择器注册通道,并指定操作的选择键集
		ch.register(sel, SelectionKey.OP_READ | SelectionKey.OP_WRITE |
 SelectionKey.OP_CONNECT);
			//选择通道上注册的事件,其相应通道已为I/O操作准备就绪
			sel.select();
			//返回选择器的已选择键集
			Iterator it = sel.selectedKeys().iterator();
			while(it.hasNext()){
				//获取通道的选择器的键
	SelectionKey key = (SelectionKey)it.next();
	it.remove();
	//如果该通道已经准备好套接字连接
	if(ke
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值