首页 > 代码库 > java nio网络编程服务篇入门
java nio网络编程服务篇入门
服务端写完了,现在写一个客户端,对于客户端,我考虑使用nio或阻塞socket都可以。
使用nio的客户端:
1 /** 2 * 初始化网络连接 3 */ 4 public void run() { 5 6 // 开启网络连接 7 try { 8 channel = SocketUtils.connect("127.0.0.1",8080); 9 selector = Selector.open();10 channel.register(selector, SelectionKey.OP_CONNECT);11 while(running) {12 selector.select();13 Iterator ite = selector.selectedKeys().iterator();14 while (ite.hasNext()) {15 SelectionKey key = (SelectionKey) ite.next();16 ite.remove();17 readData(key);18 }19 }20 } catch (Throwable e) {21 logger.error(" socket or other fail!",e);22 } finally {23 // 关闭channel24 if (channel != null) {25 try {26 channel.close();27 } catch (IOException e) {28 e.printStackTrace();29 }30 }31 // 关闭selector32 if (selector != null) {33 try {34 selector.close();35 } catch (IOException e) {36 e.printStackTrace();37 }38 }39 }40 }
读取数据方式和服务端一样,就不写了。
下面是阻塞socket方式:
1 public void run(){ 2 byte[] buffer = new byte[512]; 3 running = true; 4 while(running) { 5 try { 6 socket = new Socket("127.0.0.1", 8080); 7 InputStream inputStream = socket.getInputStream(); 8 OutputStream outputStream = socket.getOutputStream(); 9 handleConnectListener(ConnectListener.ConnectStatus.connected);10 // 读取数据11 int bufferCount = -1;12 ByteBuffer byteBuffer = ByteBuffer.allocate(buffer.length*2);13 messageHandler.initByteBufferSize(byteBuffer.capacity());14 while ((bufferCount = inputStream.read(buffer))>=0){15 byteBuffer.put(buffer,0,bufferCount);16 // TODO 解析 17 }18 } catch (Exception e) {19 e.printStackTrace();20 }21 }22 }
客户端在连接时,是继承Thread的,调用时记得start()。
虽然第二个实例没有使用nio,但使用bytebuffer,这个东西还是很好用的。
java nio网络编程服务篇入门
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。