package com.hfkj.netty_test.io.nio;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
public class NioClient {
private static final int BLOCK_SIZE = 4096;
private static ByteBuffer sendBuffer = ByteBuffer.allocate(BLOCK_SIZE);
private static ByteBuffer receiveBuffer = ByteBuffer.allocate(BLOCK_SIZE);
// 定义检查SocketChanel的Selector对象
private Selector selector;
// 客户端SocketChannel
private SocketChannel socketChannel;
// 监听的端口号
private int port = 8787;
private String ip = "127.0.0.1";
public NioClient() throws IOException {
selector = Selector.open();
InetSocketAddress isa = new InetSocketAddress(ip, port);
socketChannel = SocketChannel.open();
// 设置该SocketChannel为非阻塞的方式工作
socketChannel.configureBlocking(false);
// 将SocketChannel对象注册到Selector
socketChannel.register(selector, SelectionKey.OP_CONNECT);
socketChannel.connect(isa);
}
public void listener() throws IOException, InterruptedException {
while (true) {
// 选择一组键
selector.select();
Set<SelectionKey> selectionKeys = selector.selectedKeys();
Iterator<SelectionKey> keys = selectionKeys.iterator();
while (keys.hasNext()) {
SelectionKey key = keys.next();
processKey(key);
}
selectionKeys.clear();
Thread.sleep(3000);
}
}
public void processKey(SelectionKey key) throws IOException {
// 判断此键的通道是否已完成其套接字连接操作
if (key.isConnectable()) {
System.out.println("Client: already connected.");
socketChannel = (SocketChannel) key.channel();
// 判断该通道是否进行连接过程、完成连接过程
if (socketChannel.isConnectionPending()) {
System.out.println("Client: 已经连接");
socketChannel.finishConnect();
sendBuffer.clear();
sendBuffer.put("hello nio server".getBytes());
sendBuffer.flip();
socketChannel.write(sendBuffer); // 将数据写入该通道
// 将SocketChannel对象注册到Selector且通道是准备读数据的状态
socketChannel.register(selector, SelectionKey.OP_WRITE);
}
} else if (key.isReadable()) {
socketChannel = (SocketChannel) key.channel();
receiveBuffer.clear();
int count = socketChannel.read(receiveBuffer);
if (count > 0) {
String receiveMessage = new String(receiveBuffer.array(), 0,
count);
// System.out.println("Client:接收到来自Server的消息," +
// receiveMessage);
// 将SocketChannel对象注册到Selector且通道是准备写数据的状态
socketChannel.register(selector, SelectionKey.OP_WRITE);
}
} else if (key.isWritable()) {
socketChannel = (SocketChannel) key.channel();
// String sendText = "hello server,key..";
// sendBuffer.clear();
// sendBuffer.put(sendText.getBytes());
// // 将缓冲区各标志复位,因为向里面put了数据标志被改变要想从中读取数据发向服务器,就要复位
// sendBuffer.flip();
// //
// socketChannel.write(sendBuffer);
Scanner scanner=new Scanner(System.in);//控制台输入对象
System.out.println("请输入第一个整数:");
String a = scanner.nextLine();//从控制台输入第一个数
sendBuffer.clear();
sendBuffer.put(a.getBytes());
// 将缓冲区各标志复位,因为向里面put了数据标志被改变要想从中读取数据发向服务器,就要复位
sendBuffer.flip();
//
socketChannel.write(sendBuffer);
System.out.println("Client:客户端向服务器端发送数据--:" + a);
socketChannel.register(selector, SelectionKey.OP_WRITE);
// }
}
}
public static void main(String[] args) {
try {
// Scanner scan = new Scanner(System.in);
//// if (scan.hasNextLine()) {
// String line = scan.nextLine();
// System.out.println("你输入的是:"+line);
//// }
new NioClient().listener();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
netty示例NIO示例

共36个文件
class:11个
java:7个
xml:4个

需积分: 31 8 下载量 161 浏览量
2016-11-18
11:06:57
上传
评论 1
收藏 31KB RAR 举报
温馨提示
myeclipse开发通信示例,框架netty,代码本人写的,而且已测试通过,先运行NettyService,再运行NettyClient即可看到效果。nio示例也有,原理一样,运行先后顺序同netty.
资源推荐
资源详情
资源评论










格式:pdf 资源大小:56.4KB 页数:4



















收起资源包目录




































































共 36 条
- 1
资源评论


benxiaohai529
- 粉丝: 21
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- AlaricChenJiaYuan__46352_1756522500308.zip
- 自动驾驶端到端闭环硬件在环仿真系统_实时传感器模拟与高保真环境建模_用于高级驾驶辅助系统和自动驾驶算法的开发验证与安全测试_多传感器融合仿真引擎_大规模合成数据生成_基于场景的实时.zip
- 工业机器人安装密度(2006-2023年)
- 微信小程序云开发,证件照小程序.zip
- 小程序&微信支付&商城.zip
- 微信小程序:仿盒马app.zip
- 运动演示-支持H5,Android,微信小程序.zip
- uni-app 开发的微信小程序-小兔鲜儿电商项目.zip
- 微信小程序气泡组件.zip
- 微信小程序swiper插件.zip
- 微信小程序版聊天室.zip
- wxParse-微信小程序富文本解析自定义组件,支持HTML及markdown解析.zip
- 微信小程序-点餐.zip
- 微信小程序图表charts组件.zip
- 微信小程序图片裁剪工具.zip
- 微信小程序开源项目库汇总.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
